selfisys_public/docs/_modules/selfisys/utils/plot_utils.html
2025-01-10 17:03:16 +01:00

2741 lines
No EOL
430 KiB
HTML

<!DOCTYPE html>
<html class="writer-html5" lang="en" data-content_root="../../../">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>selfisys.utils.plot_utils &mdash; SelfiSys /Users/hoellinger/Library/CloudStorage/Dropbox/travail/these/science/code/SELFI/selfisys/src/ documentation</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=80d5e7a1" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../_static/documentation_options.js?v=75025241"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
SelfiSys
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">API Documentation</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../../selfisys.hiddenbox.html">hiddenbox</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.hiddenbox.html#selfisys.hiddenbox.HiddenBox"><code class="docutils literal notranslate"><span class="pre">HiddenBox</span></code></a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.hiddenbox.html#selfisys.hiddenbox.HiddenBox.Npop"><code class="docutils literal notranslate"><span class="pre">HiddenBox.Npop</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.hiddenbox.html#selfisys.hiddenbox.HiddenBox.Ntimesteps"><code class="docutils literal notranslate"><span class="pre">HiddenBox.Ntimesteps</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.hiddenbox.html#selfisys.hiddenbox.HiddenBox.Psingle"><code class="docutils literal notranslate"><span class="pre">HiddenBox.Psingle</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.hiddenbox.html#selfisys.hiddenbox.HiddenBox.compute_pool"><code class="docutils literal notranslate"><span class="pre">HiddenBox.compute_pool()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.hiddenbox.html#selfisys.hiddenbox.HiddenBox.evaluate"><code class="docutils literal notranslate"><span class="pre">HiddenBox.evaluate()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.hiddenbox.html#selfisys.hiddenbox.HiddenBox.force_neglect_lightcone"><code class="docutils literal notranslate"><span class="pre">HiddenBox.force_neglect_lightcone</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.hiddenbox.html#selfisys.hiddenbox.HiddenBox.force_recompute_mocks"><code class="docutils literal notranslate"><span class="pre">HiddenBox.force_recompute_mocks</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.hiddenbox.html#selfisys.hiddenbox.HiddenBox.gravity_on"><code class="docutils literal notranslate"><span class="pre">HiddenBox.gravity_on</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.hiddenbox.html#selfisys.hiddenbox.HiddenBox.load_pool"><code class="docutils literal notranslate"><span class="pre">HiddenBox.load_pool()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.hiddenbox.html#selfisys.hiddenbox.HiddenBox.make_data"><code class="docutils literal notranslate"><span class="pre">HiddenBox.make_data()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.hiddenbox.html#selfisys.hiddenbox.HiddenBox.modified_selfi"><code class="docutils literal notranslate"><span class="pre">HiddenBox.modified_selfi</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.hiddenbox.html#selfisys.hiddenbox.HiddenBox.prefix_mocks"><code class="docutils literal notranslate"><span class="pre">HiddenBox.prefix_mocks</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.hiddenbox.html#selfisys.hiddenbox.HiddenBox.reset_survey"><code class="docutils literal notranslate"><span class="pre">HiddenBox.reset_survey()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.hiddenbox.html#selfisys.hiddenbox.HiddenBox.setup_only"><code class="docutils literal notranslate"><span class="pre">HiddenBox.setup_only</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.hiddenbox.html#selfisys.hiddenbox.HiddenBox.switch_recompute_pool"><code class="docutils literal notranslate"><span class="pre">HiddenBox.switch_recompute_pool()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.hiddenbox.html#selfisys.hiddenbox.HiddenBox.switch_setup"><code class="docutils literal notranslate"><span class="pre">HiddenBox.switch_setup()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.hiddenbox.html#selfisys.hiddenbox.HiddenBox.update"><code class="docutils literal notranslate"><span class="pre">HiddenBox.update()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../../selfisys.normalise_hb.html">normalise_hb</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.normalise_hb.html#selfisys.normalise_hb.define_normalisation"><code class="docutils literal notranslate"><span class="pre">define_normalisation()</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.normalise_hb.html#selfisys.normalise_hb.worker_normalisation"><code class="docutils literal notranslate"><span class="pre">worker_normalisation()</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.normalise_hb.html#selfisys.normalise_hb.worker_normalisation_public"><code class="docutils literal notranslate"><span class="pre">worker_normalisation_public()</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.normalise_hb.html#selfisys.normalise_hb.worker_normalisation_wrapper"><code class="docutils literal notranslate"><span class="pre">worker_normalisation_wrapper()</span></code></a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../../selfisys.prior.html">prior</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.prior.html#selfisys.prior.get_summary"><code class="docutils literal notranslate"><span class="pre">get_summary()</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.prior.html#selfisys.prior.logposterior_hyperparameters_parallel"><code class="docutils literal notranslate"><span class="pre">logposterior_hyperparameters_parallel()</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.prior.html#selfisys.prior.perform_prior_optimisation_and_plot"><code class="docutils literal notranslate"><span class="pre">perform_prior_optimisation_and_plot()</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.prior.html#selfisys.prior.planck_prior"><code class="docutils literal notranslate"><span class="pre">planck_prior</span></code></a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.prior.html#selfisys.prior.planck_prior.mean"><code class="docutils literal notranslate"><span class="pre">planck_prior.mean</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.prior.html#selfisys.prior.planck_prior.covariance"><code class="docutils literal notranslate"><span class="pre">planck_prior.covariance</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.prior.html#selfisys.prior.planck_prior.inv_covariance"><code class="docutils literal notranslate"><span class="pre">planck_prior.inv_covariance</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.prior.html#selfisys.prior.planck_prior.Nbin_max"><code class="docutils literal notranslate"><span class="pre">planck_prior.Nbin_max</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.prior.html#selfisys.prior.planck_prior.Nbin_min"><code class="docutils literal notranslate"><span class="pre">planck_prior.Nbin_min</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.prior.html#selfisys.prior.planck_prior.compute"><code class="docutils literal notranslate"><span class="pre">planck_prior.compute()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.prior.html#selfisys.prior.planck_prior.load"><code class="docutils literal notranslate"><span class="pre">planck_prior.load()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.prior.html#selfisys.prior.planck_prior.logpdf"><code class="docutils literal notranslate"><span class="pre">planck_prior.logpdf()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.prior.html#selfisys.prior.planck_prior.sample"><code class="docutils literal notranslate"><span class="pre">planck_prior.sample()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.prior.html#selfisys.prior.planck_prior.save"><code class="docutils literal notranslate"><span class="pre">planck_prior.save()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.prior.html#selfisys.prior.worker_class"><code class="docutils literal notranslate"><span class="pre">worker_class()</span></code></a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../../selfisys.selection_functions.html">selection_functions</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.selection_functions.html#selfisys.selection_functions.LognormalSelection"><code class="docutils literal notranslate"><span class="pre">LognormalSelection</span></code></a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.selection_functions.html#selfisys.selection_functions.LognormalSelection.init_selection"><code class="docutils literal notranslate"><span class="pre">LognormalSelection.init_selection()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.selection_functions.html#selfisys.selection_functions.LognormalSelection.lognormals_z_to_x"><code class="docutils literal notranslate"><span class="pre">LognormalSelection.lognormals_z_to_x()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.selection_functions.html#selfisys.selection_functions.LognormalSelection.multiple_lognormal"><code class="docutils literal notranslate"><span class="pre">LognormalSelection.multiple_lognormal()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.selection_functions.html#selfisys.selection_functions.LognormalSelection.multiple_lognormal_z"><code class="docutils literal notranslate"><span class="pre">LognormalSelection.multiple_lognormal_z()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.selection_functions.html#selfisys.selection_functions.LognormalSelection.one_lognormal"><code class="docutils literal notranslate"><span class="pre">LognormalSelection.one_lognormal()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.selection_functions.html#selfisys.selection_functions.LognormalSelection.one_lognormal_z"><code class="docutils literal notranslate"><span class="pre">LognormalSelection.one_lognormal_z()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.selection_functions.html#selfisys.selection_functions.LognormalSelection.r_grid"><code class="docutils literal notranslate"><span class="pre">LognormalSelection.r_grid()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../../selfisys.selfi_interface.html">selfi_interface</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.selfi_interface.html#selfisys.selfi_interface.PrintMessage"><code class="docutils literal notranslate"><span class="pre">PrintMessage()</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.selfi_interface.html#selfisys.selfi_interface.indent"><code class="docutils literal notranslate"><span class="pre">indent()</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.selfi_interface.html#selfisys.selfi_interface.unindent"><code class="docutils literal notranslate"><span class="pre">unindent()</span></code></a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../../selfisys.sbmy_interface.html">sbmy_interface</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.sbmy_interface.html#selfisys.sbmy_interface.compute_Phi"><code class="docutils literal notranslate"><span class="pre">compute_Phi()</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.sbmy_interface.html#selfisys.sbmy_interface.generate_white_noise_Field"><code class="docutils literal notranslate"><span class="pre">generate_white_noise_Field()</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.sbmy_interface.html#selfisys.sbmy_interface.get_power_spectrum_from_cosmo"><code class="docutils literal notranslate"><span class="pre">get_power_spectrum_from_cosmo()</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.sbmy_interface.html#selfisys.sbmy_interface.handle_time_stepping"><code class="docutils literal notranslate"><span class="pre">handle_time_stepping()</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.sbmy_interface.html#selfisys.sbmy_interface.setup_sbmy_parfiles"><code class="docutils literal notranslate"><span class="pre">setup_sbmy_parfiles()</span></code></a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../../selfisys.grf.html">grf</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.grf.html#selfisys.grf.primordial_grf"><code class="docutils literal notranslate"><span class="pre">primordial_grf()</span></code></a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../../selfisys.utils.html">selfisys.utils package</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.utils.html#submodules">Submodules</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.utils.html#module-selfisys.utils.examples_utils">selfisys.utils.examples_utils module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.examples_utils.clear_large_plot"><code class="docutils literal notranslate"><span class="pre">clear_large_plot()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.utils.html#module-selfisys.utils.logger">selfisys.utils.logger module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.logger.CustomLogger"><code class="docutils literal notranslate"><span class="pre">CustomLogger</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.logger.CustomLogger.diagnostic"><code class="docutils literal notranslate"><span class="pre">CustomLogger.diagnostic()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.logger.CustomLoggerHandler"><code class="docutils literal notranslate"><span class="pre">CustomLoggerHandler</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.logger.CustomLoggerHandler.emit"><code class="docutils literal notranslate"><span class="pre">CustomLoggerHandler.emit()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.logger.INDENT"><code class="docutils literal notranslate"><span class="pre">INDENT()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.logger.PrintDiagnostic"><code class="docutils literal notranslate"><span class="pre">PrintDiagnostic()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.logger.PrintError"><code class="docutils literal notranslate"><span class="pre">PrintError()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.logger.PrintInfo"><code class="docutils literal notranslate"><span class="pre">PrintInfo()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.logger.PrintLeftType"><code class="docutils literal notranslate"><span class="pre">PrintLeftType()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.logger.PrintWarning"><code class="docutils literal notranslate"><span class="pre">PrintWarning()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.logger.UNINDENT"><code class="docutils literal notranslate"><span class="pre">UNINDENT()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.logger.getCustomLogger"><code class="docutils literal notranslate"><span class="pre">getCustomLogger()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.utils.html#module-selfisys.utils.low_level">selfisys.utils.low_level module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.low_level.stderr_redirector"><code class="docutils literal notranslate"><span class="pre">stderr_redirector()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.low_level.stdout_redirector"><code class="docutils literal notranslate"><span class="pre">stdout_redirector()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.utils.html#module-selfisys.utils.parser">selfisys.utils.parser module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.parser.bool_sh"><code class="docutils literal notranslate"><span class="pre">bool_sh()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.parser.check_files_exist"><code class="docutils literal notranslate"><span class="pre">check_files_exist()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.parser.intNone"><code class="docutils literal notranslate"><span class="pre">intNone()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.parser.joinstrs"><code class="docutils literal notranslate"><span class="pre">joinstrs()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.parser.joinstrs_only"><code class="docutils literal notranslate"><span class="pre">joinstrs_only()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.parser.none_or_bool_or_str"><code class="docutils literal notranslate"><span class="pre">none_or_bool_or_str()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.parser.safe_npload"><code class="docutils literal notranslate"><span class="pre">safe_npload()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.utils.html#module-selfisys.utils.path_utils">selfisys.utils.path_utils module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.path_utils.file_names_evaluate"><code class="docutils literal notranslate"><span class="pre">file_names_evaluate()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.path_utils.get_file_names"><code class="docutils literal notranslate"><span class="pre">get_file_names()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.utils.html#module-selfisys.utils.plot_examples">selfisys.utils.plot_examples module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.plot_examples.plot_comoving_distance_redshift"><code class="docutils literal notranslate"><span class="pre">plot_comoving_distance_redshift()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.plot_examples.plot_galaxy_field_slice"><code class="docutils literal notranslate"><span class="pre">plot_galaxy_field_slice()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.plot_examples.plot_power_spectrum"><code class="docutils literal notranslate"><span class="pre">plot_power_spectrum()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.plot_examples.plot_selection_functions_def_in_z"><code class="docutils literal notranslate"><span class="pre">plot_selection_functions_def_in_z()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.plot_examples.redshift_distance_conversion"><code class="docutils literal notranslate"><span class="pre">redshift_distance_conversion()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.plot_examples.relative_error_analysis"><code class="docutils literal notranslate"><span class="pre">relative_error_analysis()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.utils.html#module-selfisys.utils.plot_params">selfisys.utils.plot_params module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.plot_params.ScalarFormatterForceFormat_11"><code class="docutils literal notranslate"><span class="pre">ScalarFormatterForceFormat_11</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.plot_params.ScalarFormatterForceFormat_11.get_offset"><code class="docutils literal notranslate"><span class="pre">ScalarFormatterForceFormat_11.get_offset()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.plot_params.ScalarFormatterForceFormat_11.set_scientific"><code class="docutils literal notranslate"><span class="pre">ScalarFormatterForceFormat_11.set_scientific()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.plot_params.ScalarFormatterForceFormat_11.set_useOffset"><code class="docutils literal notranslate"><span class="pre">ScalarFormatterForceFormat_11.set_useOffset()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.plot_params.create_all_colormaps"><code class="docutils literal notranslate"><span class="pre">create_all_colormaps()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.plot_params.create_colormap"><code class="docutils literal notranslate"><span class="pre">create_colormap()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.plot_params.dynamic_text_scaling"><code class="docutils literal notranslate"><span class="pre">dynamic_text_scaling()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.plot_params.get_contours"><code class="docutils literal notranslate"><span class="pre">get_contours()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.plot_params.reset_plotting"><code class="docutils literal notranslate"><span class="pre">reset_plotting()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.plot_params.setup_plotting"><code class="docutils literal notranslate"><span class="pre">setup_plotting()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.utils.html#module-selfisys.utils.plot_utils">selfisys.utils.plot_utils module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.plot_utils.plot_C"><code class="docutils literal notranslate"><span class="pre">plot_C()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.plot_utils.plot_fisher"><code class="docutils literal notranslate"><span class="pre">plot_fisher()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.plot_utils.plot_gradients"><code class="docutils literal notranslate"><span class="pre">plot_gradients()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.plot_utils.plot_histogram"><code class="docutils literal notranslate"><span class="pre">plot_histogram()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.plot_utils.plot_mocks"><code class="docutils literal notranslate"><span class="pre">plot_mocks()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.plot_utils.plot_mocks_compact"><code class="docutils literal notranslate"><span class="pre">plot_mocks_compact()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.plot_utils.plot_observations"><code class="docutils literal notranslate"><span class="pre">plot_observations()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.plot_utils.plot_prior_and_posterior_covariances"><code class="docutils literal notranslate"><span class="pre">plot_prior_and_posterior_covariances()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.plot_utils.plot_reconstruction"><code class="docutils literal notranslate"><span class="pre">plot_reconstruction()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.plot_utils.plot_selection_functions"><code class="docutils literal notranslate"><span class="pre">plot_selection_functions()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.plot_utils.plotly_3d"><code class="docutils literal notranslate"><span class="pre">plotly_3d()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.utils.html#module-selfisys.utils.timestepping">selfisys.utils.timestepping module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.timestepping.merge_nTS"><code class="docutils literal notranslate"><span class="pre">merge_nTS()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.utils.html#module-selfisys.utils.tools">selfisys.utils.tools module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.tools.cosmo_vector_to_Simbelmyne_dict"><code class="docutils literal notranslate"><span class="pre">cosmo_vector_to_Simbelmyne_dict()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.tools.cosmo_vector_to_class_dict"><code class="docutils literal notranslate"><span class="pre">cosmo_vector_to_class_dict()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.tools.custom_stat"><code class="docutils literal notranslate"><span class="pre">custom_stat()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.tools.fisher_rao"><code class="docutils literal notranslate"><span class="pre">fisher_rao()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.tools.get_k_max"><code class="docutils literal notranslate"><span class="pre">get_k_max()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.tools.get_summary"><code class="docutils literal notranslate"><span class="pre">get_summary()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.tools.none_or_bool_or_str"><code class="docutils literal notranslate"><span class="pre">none_or_bool_or_str()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.tools.params_ids_to_Simbelmyne_dict"><code class="docutils literal notranslate"><span class="pre">params_ids_to_Simbelmyne_dict()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.tools.sample_omega_from_prior"><code class="docutils literal notranslate"><span class="pre">sample_omega_from_prior()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.tools.summary_to_score"><code class="docutils literal notranslate"><span class="pre">summary_to_score()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.utils.html#module-selfisys.utils.workers">selfisys.utils.workers module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.workers.Simbelmyne_worker"><code class="docutils literal notranslate"><span class="pre">Simbelmyne_worker()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.workers.evaluate_gradient_of_Symbelmyne"><code class="docutils literal notranslate"><span class="pre">evaluate_gradient_of_Symbelmyne()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../selfisys.utils.html#selfisys.utils.workers.worker_gradient_Symbelmyne"><code class="docutils literal notranslate"><span class="pre">worker_gradient_Symbelmyne()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../../selfisys.utils.html#module-selfisys.utils">Module contents</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Contribute</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../../CONTRIBUTING.html">Contributing to SelfiSys</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../../CONTRIBUTING.html#reporting-issues">Reporting Issues</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../CONTRIBUTING.html#submitting-contributions">Submitting Contributions</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../CONTRIBUTING.html#style-guidelines">Style Guidelines</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../../CONTRIBUTING.html#python-code">Python code</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../../CONTRIBUTING.html#jupyter-notebooks">Jupyter Notebooks</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../../CONTRIBUTING.html#questions">Questions?</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">References</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../../REFERENCES.html">References</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">SelfiSys</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content style-external-links">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="../../index.html">Module code</a></li>
<li class="breadcrumb-item active">selfisys.utils.plot_utils</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for selfisys.utils.plot_utils</h1><div class="highlight"><pre>
<span></span><span class="ch">#!/usr/bin/env python3</span>
<span class="c1"># ----------------------------------------------------------------------</span>
<span class="c1"># Copyright (C) 2024 Tristan Hoellinger</span>
<span class="c1"># Distributed under the GNU General Public License v3.0 (GPLv3).</span>
<span class="c1"># See the LICENSE file in the root directory for details.</span>
<span class="c1"># SPDX-License-Identifier: GPL-3.0-or-later</span>
<span class="c1"># ----------------------------------------------------------------------</span>
<span class="n">__author__</span> <span class="o">=</span> <span class="s2">&quot;Tristan Hoellinger&quot;</span>
<span class="n">__version__</span> <span class="o">=</span> <span class="s2">&quot;0.1.0&quot;</span>
<span class="n">__date__</span> <span class="o">=</span> <span class="s2">&quot;2024&quot;</span>
<span class="n">__license__</span> <span class="o">=</span> <span class="s2">&quot;GPLv3&quot;</span>
<span class="sd">&quot;&quot;&quot;Plotting routines for the SelfiSys project.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">gc</span>
<span class="kn">from</span> <span class="nn">pathlib</span> <span class="kn">import</span> <span class="n">Path</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span>
<span class="kn">from</span> <span class="nn">matplotlib</span> <span class="kn">import</span> <span class="n">gridspec</span><span class="p">,</span> <span class="n">colors</span>
<span class="kn">from</span> <span class="nn">matplotlib.ticker</span> <span class="kn">import</span> <span class="n">FormatStrFormatter</span><span class="p">,</span> <span class="n">ScalarFormatter</span>
<span class="kn">from</span> <span class="nn">selfisys.utils.plot_params</span> <span class="kn">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">selfisys.utils.logger</span> <span class="kn">import</span> <span class="n">getCustomLogger</span>
<span class="n">logger</span> <span class="o">=</span> <span class="n">getCustomLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span>
<span class="c1"># Configure global plotting settings</span>
<span class="n">setup_plotting</span><span class="p">()</span>
<div class="viewcode-block" id="plot_selection_functions">
<a class="viewcode-back" href="../../../selfisys.utils.html#selfisys.utils.plot_utils.plot_selection_functions">[docs]</a>
<span class="k">def</span> <span class="nf">plot_selection_functions</span><span class="p">(</span>
<span class="n">x</span><span class="p">,</span>
<span class="n">res</span><span class="p">,</span>
<span class="n">res_mis</span><span class="p">,</span>
<span class="n">params</span><span class="p">,</span>
<span class="n">L</span><span class="p">,</span>
<span class="n">corner</span><span class="p">,</span>
<span class="n">axis</span><span class="o">=</span><span class="s2">&quot;com&quot;</span><span class="p">,</span>
<span class="n">zz</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">zcorner</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">z_L</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">path</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">force_plot</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">labsAB</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Plot selection functions.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> x : array-like</span>
<span class="sd"> x-axis values (e.g., comoving distances or redshifts).</span>
<span class="sd"> res : list of array-like</span>
<span class="sd"> Selection functions for Model A.</span>
<span class="sd"> res_mis : list of array-like, optional</span>
<span class="sd"> Selection functions for Model B (optional).</span>
<span class="sd"> params : tuple of (array-like, array-like, array-like), optional</span>
<span class="sd"> Standard deviations, means, and normalisation factors for the</span>
<span class="sd"> multiple galaxy populations.</span>
<span class="sd"> L : float</span>
<span class="sd"> Box size.</span>
<span class="sd"> corner : float</span>
<span class="sd"> Diagonal box size.</span>
<span class="sd"> axis : str, optional</span>
<span class="sd"> x-axis type (&#39;com&#39; for comoving distance, &#39;redshift&#39; for</span>
<span class="sd"> redshift).</span>
<span class="sd"> zz : array-like, optional</span>
<span class="sd"> Mapping between comoving distances and redshifts.</span>
<span class="sd"> zcorner : float, optional</span>
<span class="sd"> Redshift corresponding to the diagonal box size.</span>
<span class="sd"> z_L : float, optional</span>
<span class="sd"> Redshift corresponding to the box side length.</span>
<span class="sd"> path : str, optional</span>
<span class="sd"> Path to save the output plot.</span>
<span class="sd"> force_plot : bool, optional</span>
<span class="sd"> If True, displays the plot even if a path is specified.</span>
<span class="sd"> labsAB : bool, optional</span>
<span class="sd"> If True, labels models as &#39;Model A&#39; and &#39;Model B&#39;.</span>
<span class="sd"> Raises</span>
<span class="sd"> ------</span>
<span class="sd"> RuntimeError</span>
<span class="sd"> If unexpected errors occur during plotting.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Plotting selection functions...&quot;</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">colours_list</span> <span class="o">=</span> <span class="n">COLOUR_LIST</span><span class="p">[:</span> <span class="nb">len</span><span class="p">(</span><span class="n">res</span><span class="p">)]</span>
<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">5</span><span class="p">))</span>
<span class="c1"># Plot rescaled selection functions for Model A</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">r</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">res</span><span class="p">):</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">r</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="n">colours_list</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="c1"># , label=None)</span>
<span class="c1"># Plot rescaled selection functions for Model B, if provided</span>
<span class="k">if</span> <span class="n">res_mis</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">label_a</span> <span class="o">=</span> <span class="s2">&quot;Model A&quot;</span> <span class="k">if</span> <span class="n">labsAB</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">res</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="n">color</span><span class="o">=</span><span class="s2">&quot;black&quot;</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="n">label_a</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">r_mis</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">res_mis</span><span class="p">):</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">r_mis</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="n">colours_list</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
<span class="n">label_b</span> <span class="o">=</span> <span class="s2">&quot;Model B&quot;</span> <span class="k">if</span> <span class="n">labsAB</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">res_mis</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s2">&quot;black&quot;</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="n">label_b</span><span class="p">)</span>
<span class="c1"># Configure x-axis ticks and labels</span>
<span class="n">xticks</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="n">corner</span><span class="p">]</span>
<span class="n">xtick_labels</span> <span class="o">=</span> <span class="p">[</span><span class="sa">r</span><span class="s2">&quot;$0$&quot;</span><span class="p">]</span>
<span class="k">if</span> <span class="n">axis</span> <span class="o">==</span> <span class="s2">&quot;com&quot;</span> <span class="ow">and</span> <span class="n">corner</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">xtick_labels</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;$\sqrt 3\,L \simeq </span><span class="si">{:.2f}</span><span class="s2">$&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">corner</span><span class="p">))</span>
<span class="k">elif</span> <span class="n">axis</span> <span class="o">==</span> <span class="s2">&quot;redshift&quot;</span> <span class="ow">and</span> <span class="n">corner</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">xtick_labels</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;$z(\sqrt 3\,L) \simeq </span><span class="si">{:.3f}</span><span class="s2">$&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">corner</span><span class="p">))</span>
<span class="k">if</span> <span class="n">z_L</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">L</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">xticks</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">L</span><span class="p">)</span>
<span class="n">xtick_labels</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="sa">r</span><span class="s2">&quot;$L=3.6$&quot;</span><span class="p">)</span>
<span class="c1"># Annotate populations</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">mean</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">params</span><span class="p">[</span><span class="mi">1</span><span class="p">]):</span>
<span class="n">mean_plt</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">argmin</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">zz</span> <span class="o">-</span> <span class="n">mean</span><span class="p">))]</span> <span class="k">if</span> <span class="n">zz</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">mean</span>
<span class="n">plt</span><span class="o">.</span><span class="n">axvline</span><span class="p">(</span><span class="n">mean_plt</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="n">colours_list</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mf">1.5</span><span class="p">)</span>
<span class="n">lab_pop</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Population </span><span class="si">{</span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="n">plt</span><span class="o">.</span><span class="n">axvline</span><span class="p">(</span><span class="n">mean_plt</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="n">colours_list</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">alpha</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="n">lab_pop</span><span class="p">)</span>
<span class="n">xticks</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">mean_plt</span><span class="p">)</span>
<span class="n">xtick_labels</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;$</span><span class="si">{:.2f}</span><span class="s2">$&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">mean_plt</span><span class="p">))</span>
<span class="c1"># Set axis labels</span>
<span class="n">xlabel</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">&quot;$r\,[{\rm Gpc}/h]$&quot;</span> <span class="k">if</span> <span class="n">axis</span> <span class="o">==</span> <span class="s2">&quot;com&quot;</span> <span class="k">else</span> <span class="sa">r</span><span class="s2">&quot;$z$&quot;</span>
<span class="n">ylabel</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">&quot;$R_i(r)$&quot;</span> <span class="k">if</span> <span class="n">zcorner</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="sa">r</span><span class="s2">&quot;$R_i$&quot;</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="n">xlabel</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="n">GLOBAL_FS_LARGE</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="n">ylabel</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="n">GLOBAL_FS_LARGE</span><span class="p">)</span>
<span class="c1"># Configure ticks and grid</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xticks</span><span class="p">(</span><span class="n">xticks</span><span class="p">,</span> <span class="n">xtick_labels</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">&quot;x&quot;</span><span class="p">,</span> <span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">8</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS_SMALL</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">&quot;y&quot;</span><span class="p">,</span> <span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">8</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS_SMALL</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;-&quot;</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mf">0.4</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s2">&quot;gray&quot;</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.5</span><span class="p">)</span>
<span class="c1"># Add legend, save and display plot</span>
<span class="n">fs_legend</span> <span class="o">=</span> <span class="n">GLOBAL_FS_LARGE</span>
<span class="n">loc_legend</span> <span class="o">=</span> <span class="p">(</span><span class="mf">0.6</span><span class="p">,</span> <span class="mf">0.35</span><span class="p">)</span>
<span class="n">legend</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">(</span><span class="n">frameon</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">loc</span><span class="o">=</span><span class="n">loc_legend</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="n">fs_legend</span><span class="p">)</span>
<span class="k">for</span> <span class="n">handle</span> <span class="ow">in</span> <span class="n">legend</span><span class="o">.</span><span class="n">legend_handles</span><span class="p">:</span>
<span class="n">handle</span><span class="o">.</span><span class="n">set_alpha</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="c1"># Handle dual x-axes for redshift and comoving distance</span>
<span class="k">if</span> <span class="n">zcorner</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">ax2</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">gca</span><span class="p">()</span><span class="o">.</span><span class="n">twiny</span><span class="p">()</span>
<span class="n">ax2</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;$z$&quot;</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="n">GLOBAL_FS_LARGE</span><span class="p">)</span>
<span class="n">zticks</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">([[</span><span class="mi">0</span><span class="p">],</span> <span class="p">[</span><span class="n">z_L</span><span class="p">],</span> <span class="p">[</span><span class="n">zcorner</span><span class="p">],</span> <span class="n">params</span><span class="p">[</span><span class="mi">1</span><span class="p">]])</span>
<span class="k">if</span> <span class="n">z_L</span>
<span class="k">else</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">([[</span><span class="mi">0</span><span class="p">],</span> <span class="p">[</span><span class="n">zcorner</span><span class="p">],</span> <span class="n">params</span><span class="p">[</span><span class="mi">1</span><span class="p">]])</span>
<span class="p">)</span>
<span class="n">ax2</span><span class="o">.</span><span class="n">set_xticks</span><span class="p">(</span><span class="n">xticks</span><span class="p">)</span>
<span class="n">ax2</span><span class="o">.</span><span class="n">set_xticklabels</span><span class="p">([</span><span class="sa">r</span><span class="s2">&quot;$</span><span class="si">{:.2f}</span><span class="s2">$&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">z</span><span class="p">)</span> <span class="k">for</span> <span class="n">z</span> <span class="ow">in</span> <span class="n">zticks</span><span class="p">])</span>
<span class="n">ax2</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">&quot;x&quot;</span><span class="p">,</span> <span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">8</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS_SMALL</span><span class="p">)</span>
<span class="n">ax2</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span>
<span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;-&quot;</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mf">0.4</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s2">&quot;gray&quot;</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.5</span>
<span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">tight_layout</span><span class="p">()</span>
<span class="k">if</span> <span class="n">path</span><span class="p">:</span>
<span class="n">plt</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">bbox_inches</span><span class="o">=</span><span class="s2">&quot;tight&quot;</span><span class="p">,</span> <span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">path</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;.png&quot;</span><span class="p">,</span> <span class="s2">&quot;.pdf&quot;</span><span class="p">),</span> <span class="n">bbox_inches</span><span class="o">=</span><span class="s2">&quot;tight&quot;</span><span class="p">,</span> <span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Figure saved to </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">path</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">path</span> <span class="ow">or</span> <span class="n">force_plot</span><span class="p">:</span>
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
<span class="n">plt</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">critical</span><span class="p">(</span><span class="s2">&quot;Unexpected error during plotting: </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;Plotting failed.&quot;</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">e</span></div>
<div class="viewcode-block" id="plotly_3d">
<a class="viewcode-back" href="../../../selfisys.utils.html#selfisys.utils.plot_utils.plotly_3d">[docs]</a>
<span class="k">def</span> <span class="nf">plotly_3d</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">128</span><span class="p">,</span> <span class="n">L</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">colormap</span><span class="o">=</span><span class="s2">&quot;RdYlBu&quot;</span><span class="p">,</span> <span class="n">limits</span><span class="o">=</span><span class="s2">&quot;max&quot;</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create an interactive 3D plot of volume slices using Plotly.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> field : array-like</span>
<span class="sd"> 3D data field to visualise.</span>
<span class="sd"> size : int, optional</span>
<span class="sd"> Size of the field along one dimension. Default is 128.</span>
<span class="sd"> L : float, optional</span>
<span class="sd"> Physical size of the field in Mpc/h. Used for axis labels only.</span>
<span class="sd"> colormap : str, optional</span>
<span class="sd"> Colour map for visualisation. Default is &#39;RdYlBu&#39;.</span>
<span class="sd"> limits : str, optional</span>
<span class="sd"> Colour scale limits (&#39;max&#39;, &#39;truncate&#39;, or &#39;default&#39;). Default</span>
<span class="sd"> is &#39;max&#39;.</span>
<span class="sd"> Returns</span>
<span class="sd"> -------</span>
<span class="sd"> go.Figure</span>
<span class="sd"> Plotly figure object.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">plotly.graph_objects</span> <span class="k">as</span> <span class="nn">go</span>
<span class="n">volume</span> <span class="o">=</span> <span class="n">field</span><span class="o">.</span><span class="n">T</span>
<span class="n">rows</span><span class="p">,</span> <span class="n">cols</span> <span class="o">=</span> <span class="n">volume</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">shape</span>
<span class="c1"># Define colour scale limits</span>
<span class="k">if</span> <span class="n">limits</span> <span class="o">==</span> <span class="s2">&quot;max&quot;</span><span class="p">:</span>
<span class="n">maxcol</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">volume</span><span class="p">))</span>
<span class="n">mincol</span> <span class="o">=</span> <span class="o">-</span><span class="n">maxcol</span>
<span class="k">elif</span> <span class="n">limits</span> <span class="o">==</span> <span class="s2">&quot;truncate&quot;</span><span class="p">:</span>
<span class="n">maxcol</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="o">-</span><span class="n">volume</span><span class="p">),</span> <span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">volume</span><span class="p">))</span>
<span class="n">mincol</span> <span class="o">=</span> <span class="o">-</span><span class="n">maxcol</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">maxcol</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">volume</span><span class="p">)</span>
<span class="n">mincol</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">volume</span><span class="p">)</span>
<span class="n">midcol</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">volume</span><span class="p">)</span>
<span class="c1"># Generate frames for the animation</span>
<span class="n">nb_frames</span> <span class="o">=</span> <span class="n">size</span>
<span class="n">frames</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">go</span><span class="o">.</span><span class="n">Frame</span><span class="p">(</span>
<span class="n">data</span><span class="o">=</span><span class="n">go</span><span class="o">.</span><span class="n">Surface</span><span class="p">(</span>
<span class="n">z</span><span class="o">=</span><span class="p">(</span><span class="n">size</span> <span class="o">-</span> <span class="n">k</span><span class="p">)</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">ones</span><span class="p">((</span><span class="n">rows</span><span class="p">,</span> <span class="n">cols</span><span class="p">)),</span>
<span class="n">surfacecolor</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">flipud</span><span class="p">(</span><span class="n">volume</span><span class="p">[</span><span class="n">cols</span> <span class="o">-</span> <span class="mi">1</span> <span class="o">-</span> <span class="n">k</span><span class="p">]),</span>
<span class="n">cmin</span><span class="o">=</span><span class="n">mincol</span><span class="p">,</span>
<span class="n">cmid</span><span class="o">=</span><span class="n">midcol</span><span class="p">,</span>
<span class="n">cmax</span><span class="o">=</span><span class="n">maxcol</span><span class="p">,</span>
<span class="p">),</span>
<span class="n">name</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">k</span><span class="p">),</span> <span class="c1"># Frames must be named for proper animation</span>
<span class="p">)</span>
<span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">nb_frames</span><span class="p">)</span>
<span class="p">]</span>
<span class="c1"># Initial plot configuration</span>
<span class="n">fig</span> <span class="o">=</span> <span class="n">go</span><span class="o">.</span><span class="n">Figure</span><span class="p">(</span>
<span class="n">frames</span><span class="o">=</span><span class="n">frames</span><span class="p">,</span>
<span class="n">data</span><span class="o">=</span><span class="n">go</span><span class="o">.</span><span class="n">Surface</span><span class="p">(</span>
<span class="n">z</span><span class="o">=</span><span class="n">size</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">ones</span><span class="p">((</span><span class="n">rows</span><span class="p">,</span> <span class="n">cols</span><span class="p">)),</span>
<span class="n">surfacecolor</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">flipud</span><span class="p">(</span><span class="n">volume</span><span class="p">[</span><span class="n">cols</span> <span class="o">//</span> <span class="mi">2</span><span class="p">]),</span>
<span class="n">colorscale</span><span class="o">=</span><span class="n">colormap</span><span class="p">,</span>
<span class="n">cmin</span><span class="o">=</span><span class="n">mincol</span><span class="p">,</span>
<span class="n">cmid</span><span class="o">=</span><span class="n">midcol</span><span class="p">,</span>
<span class="n">cmax</span><span class="o">=</span><span class="n">maxcol</span><span class="p">,</span>
<span class="n">colorbar</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">thickness</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span> <span class="n">ticklen</span><span class="o">=</span><span class="mi">4</span><span class="p">),</span>
<span class="p">),</span>
<span class="p">)</span>
<span class="k">def</span> <span class="nf">frame_args</span><span class="p">(</span><span class="n">duration</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Helper function to set animation frame arguments.&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="p">{</span>
<span class="s2">&quot;frame&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;duration&quot;</span><span class="p">:</span> <span class="n">duration</span><span class="p">},</span>
<span class="s2">&quot;mode&quot;</span><span class="p">:</span> <span class="s2">&quot;immediate&quot;</span><span class="p">,</span>
<span class="s2">&quot;fromcurrent&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s2">&quot;transition&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;duration&quot;</span><span class="p">:</span> <span class="n">duration</span><span class="p">,</span> <span class="s2">&quot;easing&quot;</span><span class="p">:</span> <span class="s2">&quot;linear&quot;</span><span class="p">},</span>
<span class="p">}</span>
<span class="c1"># Add animation slider</span>
<span class="n">sliders</span> <span class="o">=</span> <span class="p">[</span>
<span class="p">{</span>
<span class="s2">&quot;pad&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;b&quot;</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span> <span class="s2">&quot;t&quot;</span><span class="p">:</span> <span class="mi">60</span><span class="p">},</span>
<span class="s2">&quot;len&quot;</span><span class="p">:</span> <span class="mf">0.9</span><span class="p">,</span>
<span class="s2">&quot;x&quot;</span><span class="p">:</span> <span class="mf">0.1</span><span class="p">,</span>
<span class="s2">&quot;y&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
<span class="s2">&quot;steps&quot;</span><span class="p">:</span> <span class="p">[</span>
<span class="p">{</span>
<span class="s2">&quot;args&quot;</span><span class="p">:</span> <span class="p">[[</span><span class="n">f</span><span class="o">.</span><span class="n">name</span><span class="p">],</span> <span class="n">frame_args</span><span class="p">(</span><span class="mi">0</span><span class="p">)],</span>
<span class="s2">&quot;label&quot;</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">k</span><span class="p">),</span>
<span class="s2">&quot;method&quot;</span><span class="p">:</span> <span class="s2">&quot;animate&quot;</span><span class="p">,</span>
<span class="p">}</span>
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">f</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">fig</span><span class="o">.</span><span class="n">frames</span><span class="p">)</span>
<span class="p">],</span>
<span class="p">}</span>
<span class="p">]</span>
<span class="c1"># Configure layout with or without physical size</span>
<span class="n">layout_config</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
<span class="n">title</span><span class="o">=</span><span class="s2">&quot;Slices in density field&quot;</span><span class="p">,</span>
<span class="n">width</span><span class="o">=</span><span class="mi">600</span><span class="p">,</span>
<span class="n">height</span><span class="o">=</span><span class="mi">600</span><span class="p">,</span>
<span class="n">scene</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span>
<span class="n">zaxis</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="nb">range</span><span class="o">=</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="n">size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">],</span> <span class="n">autorange</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
<span class="n">xaxis_title</span><span class="o">=</span><span class="s2">&quot;x [Mpc/h]&quot;</span><span class="p">,</span>
<span class="n">yaxis_title</span><span class="o">=</span><span class="s2">&quot;y [Mpc/h]&quot;</span><span class="p">,</span>
<span class="n">zaxis_title</span><span class="o">=</span><span class="s2">&quot;z [Mpc/h]&quot;</span><span class="p">,</span>
<span class="n">aspectratio</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">z</span><span class="o">=</span><span class="mi">1</span><span class="p">),</span>
<span class="p">),</span>
<span class="n">updatemenus</span><span class="o">=</span><span class="p">[</span>
<span class="p">{</span>
<span class="s2">&quot;buttons&quot;</span><span class="p">:</span> <span class="p">[</span>
<span class="p">{</span><span class="s2">&quot;args&quot;</span><span class="p">:</span> <span class="p">[</span><span class="kc">None</span><span class="p">,</span> <span class="n">frame_args</span><span class="p">(</span><span class="mi">50</span><span class="p">)],</span> <span class="s2">&quot;label&quot;</span><span class="p">:</span> <span class="s2">&quot;&amp;#9654;&quot;</span><span class="p">,</span> <span class="s2">&quot;method&quot;</span><span class="p">:</span> <span class="s2">&quot;animate&quot;</span><span class="p">},</span>
<span class="p">{</span><span class="s2">&quot;args&quot;</span><span class="p">:</span> <span class="p">[[</span><span class="kc">None</span><span class="p">],</span> <span class="n">frame_args</span><span class="p">(</span><span class="mi">0</span><span class="p">)],</span> <span class="s2">&quot;label&quot;</span><span class="p">:</span> <span class="s2">&quot;&amp;#9724;&quot;</span><span class="p">,</span> <span class="s2">&quot;method&quot;</span><span class="p">:</span> <span class="s2">&quot;animate&quot;</span><span class="p">},</span>
<span class="p">],</span>
<span class="s2">&quot;direction&quot;</span><span class="p">:</span> <span class="s2">&quot;left&quot;</span><span class="p">,</span>
<span class="s2">&quot;pad&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;r&quot;</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span> <span class="s2">&quot;t&quot;</span><span class="p">:</span> <span class="mi">70</span><span class="p">},</span>
<span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;buttons&quot;</span><span class="p">,</span>
<span class="s2">&quot;x&quot;</span><span class="p">:</span> <span class="mf">0.1</span><span class="p">,</span>
<span class="s2">&quot;y&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
<span class="p">}</span>
<span class="p">],</span>
<span class="n">sliders</span><span class="o">=</span><span class="n">sliders</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">L</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">layout_config</span><span class="p">[</span><span class="s2">&quot;scene&quot;</span><span class="p">][</span><span class="s2">&quot;xaxis&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
<span class="n">ticktext</span><span class="o">=</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="n">L</span> <span class="o">/</span> <span class="mi">2</span><span class="p">,</span> <span class="n">L</span><span class="p">],</span>
<span class="n">tickvals</span><span class="o">=</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="n">size</span> <span class="o">/</span> <span class="mi">2</span><span class="p">,</span> <span class="n">size</span><span class="p">],</span>
<span class="n">title</span><span class="o">=</span><span class="s2">&quot;x [Mpc/h]&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">layout_config</span><span class="p">[</span><span class="s2">&quot;scene&quot;</span><span class="p">][</span><span class="s2">&quot;yaxis&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
<span class="n">ticktext</span><span class="o">=</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="n">L</span> <span class="o">/</span> <span class="mi">2</span><span class="p">,</span> <span class="n">L</span><span class="p">],</span>
<span class="n">tickvals</span><span class="o">=</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="n">size</span> <span class="o">/</span> <span class="mi">2</span><span class="p">,</span> <span class="n">size</span><span class="p">],</span>
<span class="n">title</span><span class="o">=</span><span class="s2">&quot;y [Mpc/h]&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">layout_config</span><span class="p">[</span><span class="s2">&quot;scene&quot;</span><span class="p">][</span><span class="s2">&quot;zaxis&quot;</span><span class="p">][</span><span class="s2">&quot;ticktext&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="n">L</span> <span class="o">/</span> <span class="mi">2</span><span class="p">,</span> <span class="n">L</span><span class="p">]</span>
<span class="n">layout_config</span><span class="p">[</span><span class="s2">&quot;scene&quot;</span><span class="p">][</span><span class="s2">&quot;zaxis&quot;</span><span class="p">][</span><span class="s2">&quot;tickvals&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="n">size</span> <span class="o">/</span> <span class="mi">2</span><span class="p">,</span> <span class="n">size</span><span class="p">]</span>
<span class="n">fig</span><span class="o">.</span><span class="n">update_layout</span><span class="p">(</span><span class="o">**</span><span class="n">layout_config</span><span class="p">)</span>
<span class="k">return</span> <span class="n">fig</span></div>
<div class="viewcode-block" id="plot_observations">
<a class="viewcode-back" href="../../../selfisys.utils.html#selfisys.utils.plot_utils.plot_observations">[docs]</a>
<span class="k">def</span> <span class="nf">plot_observations</span><span class="p">(</span>
<span class="n">k_s</span><span class="p">,</span>
<span class="n">theta_gt</span><span class="p">,</span>
<span class="n">planck_Pk_EH</span><span class="p">,</span>
<span class="n">P_0</span><span class="p">,</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">phi_obs</span><span class="p">,</span>
<span class="n">Npop</span><span class="p">,</span>
<span class="n">path</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">force_plot</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Plot the observed power spectra and related quantities.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> k_s : ndarray</span>
<span class="sd"> Array of wavenumbers.</span>
<span class="sd"> theta_gt : ndarray</span>
<span class="sd"> Ground truth theta values.</span>
<span class="sd"> planck_Pk_EH : ndarray</span>
<span class="sd"> Planck power spectrum values.</span>
<span class="sd"> P_0 : float</span>
<span class="sd"> Normalisation constant for power spectra.</span>
<span class="sd"> Pbins : ndarray</span>
<span class="sd"> Vector of bin boundaries for the summary statistics.</span>
<span class="sd"> phi_obs : ndarray</span>
<span class="sd"> Observed summaries.</span>
<span class="sd"> Npop : int</span>
<span class="sd"> Number of populations.</span>
<span class="sd"> path : str, optional</span>
<span class="sd"> Path to save the output plot.</span>
<span class="sd"> force_plot : bool, optional</span>
<span class="sd"> If True, displays the plot even if a path is specified.</span>
<span class="sd"> Raises</span>
<span class="sd"> ------</span>
<span class="sd"> RuntimeError</span>
<span class="sd"> If unexpected errors occur during plotting.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Plotting observations...&quot;</span><span class="p">)</span>
<span class="c1"># Sanity checks</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">k_s</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">theta_gt</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">planck_Pk_EH</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">&quot;One or more input arrays are empty. The plot may be incomplete.&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">k_s</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">theta_gt</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">k_s</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">planck_Pk_EH</span><span class="p">):</span>
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">&quot;Mismatch in array lengths. Plotting may not reflect all data.&quot;</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">_</span><span class="p">,</span> <span class="n">ax1</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">12</span><span class="p">,</span> <span class="mi">5</span><span class="p">))</span>
<span class="c1"># Plot theta values</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">k_s</span><span class="p">,</span> <span class="n">theta_gt</span> <span class="o">/</span> <span class="n">P_0</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;$\boldsymbol{\uptheta}_{\mathrm</span><span class="si">{gt}</span><span class="s2">}$&quot;</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s2">&quot;C0&quot;</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">set_xscale</span><span class="p">(</span><span class="s2">&quot;log&quot;</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span>
<span class="n">k_s</span><span class="p">,</span>
<span class="n">planck_Pk_EH</span> <span class="o">/</span> <span class="n">P_0</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;$P_{\mathrm</span><span class="si">{Planck}</span><span class="s2">}(k)/P_0(k)$&quot;</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;C1&quot;</span><span class="p">,</span>
<span class="n">lw</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;$k$ [$h$/Mpc]&quot;</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;$[{\mathrm</span><span class="si">{Mpc}</span><span class="s2">}/h]^3$&quot;</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="s2">&quot;y&quot;</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;dotted&quot;</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mf">0.6</span><span class="p">)</span>
<span class="c1"># Vertical lines for theta support wavenumbers</span>
<span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">k_s</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]:</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">axvline</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="n">k</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s2">&quot;green&quot;</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;dotted&quot;</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mf">0.6</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">axvline</span><span class="p">(</span>
<span class="n">x</span><span class="o">=</span><span class="n">k_s</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;green&quot;</span><span class="p">,</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;dotted&quot;</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.6</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;$\boldsymbol{\uptheta}$ support wavenumbers&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># Vertical lines for Phi bin centres</span>
<span class="n">ax2</span> <span class="o">=</span> <span class="n">ax1</span><span class="o">.</span><span class="n">twinx</span><span class="p">()</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">axvline</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="n">Pbins</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">color</span><span class="o">=</span><span class="s2">&quot;red&quot;</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;dashed&quot;</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mf">0.5</span><span class="p">)</span>
<span class="n">ax2</span><span class="o">.</span><span class="n">axvline</span><span class="p">(</span>
<span class="n">x</span><span class="o">=</span><span class="n">Pbins</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;red&quot;</span><span class="p">,</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;dashed&quot;</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;$\boldsymbol{\Phi}$-bins centres&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">Pbins</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">]:</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">axvline</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="n">k</span><span class="p">,</span> <span class="n">ymax</span><span class="o">=</span><span class="mf">0.167</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s2">&quot;red&quot;</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;dashed&quot;</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mf">0.5</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">legend</span><span class="p">(</span><span class="n">loc</span><span class="o">=</span><span class="s2">&quot;lower left&quot;</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="mf">1e-4</span><span class="p">,</span> <span class="n">k_s</span><span class="o">.</span><span class="n">min</span><span class="p">()</span> <span class="o">-</span> <span class="mf">2e-4</span><span class="p">),</span> <span class="n">k_s</span><span class="o">.</span><span class="n">max</span><span class="p">())</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">(</span><span class="mf">7e-1</span><span class="p">,</span> <span class="mf">1.6e0</span><span class="p">)</span>
<span class="c1"># Plot observations</span>
<span class="n">len_obs</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">phi_obs</span><span class="p">)</span> <span class="o">//</span> <span class="n">Npop</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">phi_obs</span><span class="p">)</span> <span class="o">%</span> <span class="n">Npop</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span>
<span class="s2">&quot;Length of &#39;phi_obs&#39; is not divisible by the number of populations. &quot;</span>
<span class="s2">&quot;Ensure input dimensions are consistent.&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">Npop</span><span class="p">):</span>
<span class="n">ax2</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">phi_obs</span><span class="p">[</span><span class="n">i</span> <span class="o">*</span> <span class="n">len_obs</span> <span class="p">:</span> <span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">len_obs</span><span class="p">],</span>
<span class="n">marker</span><span class="o">=</span><span class="s2">&quot;x&quot;</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;$\boldsymbol{\Phi}_{\mathrm</span><span class="si">{obs}</span><span class="s2">}$, population &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">),</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="n">COLOUR_LIST</span><span class="p">[</span><span class="n">i</span><span class="p">],</span>
<span class="p">)</span>
<span class="n">ax2</span><span class="o">.</span><span class="n">legend</span><span class="p">(</span><span class="n">loc</span><span class="o">=</span><span class="s2">&quot;upper right&quot;</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">)</span>
<span class="k">if</span> <span class="n">path</span><span class="p">:</span>
<span class="n">plt</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">bbox_inches</span><span class="o">=</span><span class="s2">&quot;tight&quot;</span><span class="p">,</span> <span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">path</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;.png&quot;</span><span class="p">,</span> <span class="s2">&quot;.pdf&quot;</span><span class="p">),</span> <span class="n">bbox_inches</span><span class="o">=</span><span class="s2">&quot;tight&quot;</span><span class="p">,</span> <span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Figure saved to </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">path</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">path</span> <span class="ow">or</span> <span class="n">force_plot</span><span class="p">:</span>
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
<span class="n">plt</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">critical</span><span class="p">(</span><span class="s2">&quot;Unexpected error during plotting: </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;Plotting failed.&quot;</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">e</span></div>
<div class="viewcode-block" id="plot_reconstruction">
<a class="viewcode-back" href="../../../selfisys.utils.html#selfisys.utils.plot_utils.plot_reconstruction">[docs]</a>
<span class="k">def</span> <span class="nf">plot_reconstruction</span><span class="p">(</span>
<span class="n">k_s</span><span class="p">,</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">prior_theta_mean</span><span class="p">,</span>
<span class="n">prior_theta_covariance</span><span class="p">,</span>
<span class="n">posterior_theta_mean</span><span class="p">,</span>
<span class="n">posterior_theta_covariance</span><span class="p">,</span>
<span class="n">theta_gt</span><span class="p">,</span>
<span class="n">P_0</span><span class="p">,</span>
<span class="n">phi_obs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">suptitle</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">theta_fid</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">savepath</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">force_plot</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">legend_loc</span><span class="o">=</span><span class="s2">&quot;upper right&quot;</span><span class="p">,</span>
<span class="n">enforce_ylims</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Plot the prior, posterior and ground truth power spectra.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> k_s : ndarray</span>
<span class="sd"> Array of wavenumbers.</span>
<span class="sd"> Pbins : ndarray</span>
<span class="sd"> Vector of bin boundaries for the summary statistics.</span>
<span class="sd"> prior_theta_mean : ndarray</span>
<span class="sd"> Mean of the prior distribution.</span>
<span class="sd"> prior_theta_covariance : ndarray</span>
<span class="sd"> Covariance of the prior distribution.</span>
<span class="sd"> posterior_theta_mean : ndarray</span>
<span class="sd"> Mean of the posterior distribution.</span>
<span class="sd"> posterior_theta_covariance : ndarray</span>
<span class="sd"> Covariance of the posterior distribution.</span>
<span class="sd"> theta_gt : ndarray</span>
<span class="sd"> Ground truth power spectrum.</span>
<span class="sd"> P_0 : float</span>
<span class="sd"> Normalisation constant for the power spectrum.</span>
<span class="sd"> phi_obs : ndarray, optional</span>
<span class="sd"> Observed summaries.</span>
<span class="sd"> suptitle : str, optional</span>
<span class="sd"> Plot title. Leave empty for no title.</span>
<span class="sd"> theta_fid : ndarray, optional</span>
<span class="sd"> Fiducial theta for hyperparameter tuning (for some priors).</span>
<span class="sd"> savepath : str or Path, optional</span>
<span class="sd"> Path to save the plot.</span>
<span class="sd"> force_plot : bool, optional</span>
<span class="sd"> If True, displays the plot even if a path is specified.</span>
<span class="sd"> legend_loc : str, optional</span>
<span class="sd"> Location of the plot legend.</span>
<span class="sd"> enforce_ylims : bool, optional</span>
<span class="sd"> Enforce y-axis limits.</span>
<span class="sd"> Raises</span>
<span class="sd"> ------</span>
<span class="sd"> RuntimeError</span>
<span class="sd"> If unexpected errors occur during plotting.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Generating power spectrum reconstruction plot.&quot;</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">14</span><span class="p">,</span> <span class="mi">5</span><span class="p">))</span>
<span class="c1"># Prior</span>
<span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="n">k_s</span><span class="p">,</span>
<span class="n">prior_theta_mean</span><span class="p">,</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;-&quot;</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;gold&quot;</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="s2">&quot;$</span><span class="se">\\</span><span class="s2">boldsymbol{</span><span class="se">\\</span><span class="s2">uptheta}_0$ (prior)&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">fill_between</span><span class="p">(</span>
<span class="n">k_s</span><span class="p">,</span>
<span class="n">prior_theta_mean</span> <span class="o">-</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">prior_theta_covariance</span><span class="p">)),</span>
<span class="n">prior_theta_mean</span> <span class="o">+</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">prior_theta_covariance</span><span class="p">)),</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;gold&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="mf">0.2</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># Fiducial theta used for hyperparameter tuning with some priors</span>
<span class="k">if</span> <span class="n">theta_fid</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="n">k_s</span><span class="p">,</span>
<span class="n">theta_fid</span><span class="p">,</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;C1&quot;</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="s2">&quot;$</span><span class="se">\\</span><span class="s2">boldsymbol{</span><span class="se">\\</span><span class="s2">uptheta}_{</span><span class="se">\\</span><span class="s2">mathrm</span><span class="si">{fid}</span><span class="s2">}$ (fiducial)&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># Posterior</span>
<span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="n">k_s</span><span class="p">,</span>
<span class="n">posterior_theta_mean</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;C2&quot;</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="s2">&quot;$</span><span class="se">\\</span><span class="s2">boldsymbol{</span><span class="se">\\</span><span class="s2">upgamma}$ (reconstruction)&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">fill_between</span><span class="p">(</span>
<span class="n">k_s</span><span class="p">,</span>
<span class="n">posterior_theta_mean</span> <span class="o">-</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">posterior_theta_covariance</span><span class="p">)),</span>
<span class="n">posterior_theta_mean</span> <span class="o">+</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">posterior_theta_covariance</span><span class="p">)),</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;C2&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="mf">0.35</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># Ground truth</span>
<span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="n">k_s</span><span class="p">,</span>
<span class="n">theta_gt</span> <span class="o">/</span> <span class="n">P_0</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;C0&quot;</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="s2">&quot;$</span><span class="se">\\</span><span class="s2">boldsymbol{</span><span class="se">\\</span><span class="s2">uptheta}_</span><span class="se">\\</span><span class="s2">mathrm</span><span class="si">{gt}</span><span class="s2">$ (groundtruth)&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># Plot the binning</span>
<span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">get_ylim</span><span class="p">()</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">k_s</span><span class="p">)):</span>
<span class="n">ax</span><span class="o">.</span><span class="n">axvline</span><span class="p">(</span>
<span class="n">k_s</span><span class="p">[</span><span class="n">i</span><span class="p">],</span>
<span class="n">ymin</span><span class="o">=</span><span class="n">ymin</span><span class="p">,</span>
<span class="n">ymax</span><span class="o">=</span><span class="n">ymax</span><span class="p">,</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;:&quot;</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.8</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;green&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">vlines</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span> <span class="n">ymin</span><span class="o">=</span><span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span><span class="o">=</span><span class="mf">0.8</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mf">0.8</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s2">&quot;red&quot;</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.5</span>
<span class="p">)</span>
<span class="c1"># Overlay observations if provided</span>
<span class="k">if</span> <span class="n">phi_obs</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">ax2</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">twinx</span><span class="p">()</span>
<span class="n">ax2</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">Pbins</span><span class="p">,</span> <span class="n">phi_obs</span><span class="p">,</span> <span class="s2">&quot;C3.-&quot;</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;$\Phi_</span><span class="si">{O}</span><span class="s2">$ (observations)&quot;</span><span class="p">)</span>
<span class="n">ax2</span><span class="o">.</span><span class="n">legend</span><span class="p">(</span><span class="n">loc</span><span class="o">=</span><span class="s2">&quot;lower right&quot;</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="n">GLOBAL_FS_LARGE</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">([</span><span class="n">k_s</span><span class="o">.</span><span class="n">min</span><span class="p">()</span> <span class="o">-</span> <span class="mf">0.0001</span><span class="p">,</span> <span class="n">k_s</span><span class="o">.</span><span class="n">max</span><span class="p">()])</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_xscale</span><span class="p">(</span><span class="s2">&quot;log&quot;</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="n">visible</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;:&quot;</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s2">&quot;grey&quot;</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;minor&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">)</span>
<span class="k">if</span> <span class="n">enforce_ylims</span><span class="p">:</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">([</span><span class="mf">0.85</span><span class="p">,</span> <span class="mf">1.35</span><span class="p">])</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s2">&quot;$k$ [$h$/Mpc]&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">GLOBAL_FS_LARGE</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s2">&quot;$</span><span class="se">\\</span><span class="s2">theta(k) = P(k)/P_0(k)$&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">GLOBAL_FS_LARGE</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">legend</span><span class="p">(</span><span class="n">loc</span><span class="o">=</span><span class="n">legend_loc</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="n">GLOBAL_FS_LARGE</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">suptitle</span><span class="p">(</span><span class="n">suptitle</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="n">GLOBAL_FS_XLARGE</span><span class="p">)</span> <span class="k">if</span> <span class="n">suptitle</span> <span class="k">else</span> <span class="kc">None</span>
<span class="c1"># Save / display</span>
<span class="k">if</span> <span class="n">savepath</span><span class="p">:</span>
<span class="n">fig</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">savepath</span><span class="p">,</span> <span class="n">bbox_inches</span><span class="o">=</span><span class="s2">&quot;tight&quot;</span><span class="p">,</span> <span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="s2">&quot;png&quot;</span><span class="p">,</span> <span class="n">transparent</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">fig</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span>
<span class="n">savepath</span><span class="p">[:</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">+</span> <span class="s2">&quot;_white.png&quot;</span><span class="p">,</span>
<span class="n">bbox_inches</span><span class="o">=</span><span class="s2">&quot;tight&quot;</span><span class="p">,</span>
<span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span>
<span class="nb">format</span><span class="o">=</span><span class="s2">&quot;png&quot;</span><span class="p">,</span>
<span class="n">transparent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">fig</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">savepath</span><span class="p">[:</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">+</span> <span class="s2">&quot;.pdf&quot;</span><span class="p">,</span> <span class="n">bbox_inches</span><span class="o">=</span><span class="s2">&quot;tight&quot;</span><span class="p">,</span> <span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="s2">&quot;pdf&quot;</span><span class="p">)</span>
<span class="n">fig</span><span class="o">.</span><span class="n">suptitle</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="n">fig</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span>
<span class="n">savepath</span><span class="p">[:</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">+</span> <span class="s2">&quot;_notitle.png&quot;</span><span class="p">,</span>
<span class="n">bbox_inches</span><span class="o">=</span><span class="s2">&quot;tight&quot;</span><span class="p">,</span>
<span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span>
<span class="nb">format</span><span class="o">=</span><span class="s2">&quot;png&quot;</span><span class="p">,</span>
<span class="n">transparent</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">fig</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span>
<span class="n">savepath</span><span class="p">[:</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">+</span> <span class="s2">&quot;_white_notitle.png&quot;</span><span class="p">,</span>
<span class="n">bbox_inches</span><span class="o">=</span><span class="s2">&quot;tight&quot;</span><span class="p">,</span>
<span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span>
<span class="nb">format</span><span class="o">=</span><span class="s2">&quot;png&quot;</span><span class="p">,</span>
<span class="n">transparent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">fig</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span>
<span class="n">savepath</span><span class="p">[:</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">+</span> <span class="s2">&quot;_notitle.pdf&quot;</span><span class="p">,</span>
<span class="n">bbox_inches</span><span class="o">=</span><span class="s2">&quot;tight&quot;</span><span class="p">,</span>
<span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span>
<span class="nb">format</span><span class="o">=</span><span class="s2">&quot;pdf&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Figure saved to </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">savepath</span><span class="p">)</span>
<span class="k">if</span> <span class="n">force_plot</span> <span class="ow">or</span> <span class="n">savepath</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">critical</span><span class="p">(</span><span class="s2">&quot;Unexpected error during plotting: </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;Plotting failed.&quot;</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">e</span>
<span class="k">finally</span><span class="p">:</span>
<span class="n">plt</span><span class="o">.</span><span class="n">close</span><span class="p">(</span><span class="n">fig</span><span class="p">)</span>
<span class="k">del</span> <span class="n">fig</span><span class="p">,</span> <span class="n">ax</span>
<span class="n">gc</span><span class="o">.</span><span class="n">collect</span><span class="p">()</span></div>
<div class="viewcode-block" id="plot_fisher">
<a class="viewcode-back" href="../../../selfisys.utils.html#selfisys.utils.plot_utils.plot_fisher">[docs]</a>
<span class="k">def</span> <span class="nf">plot_fisher</span><span class="p">(</span><span class="n">F0</span><span class="p">,</span> <span class="n">params_names_fisher</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Plot the Fisher matrix as a heatmap.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> F0 : ndarray</span>
<span class="sd"> Fisher matrix.</span>
<span class="sd"> params_names_fisher : list of str</span>
<span class="sd"> Names for the axes.</span>
<span class="sd"> title : str, optional</span>
<span class="sd"> Title of the plot. Default is &quot;Fisher matrix&quot;.</span>
<span class="sd"> path : str or Path, optional</span>
<span class="sd"> Path to save the plot. If None, the plot is displayed.</span>
<span class="sd"> Raises</span>
<span class="sd"> ------</span>
<span class="sd"> RuntimeError</span>
<span class="sd"> If unexpected errors occur during plotting.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">seaborn</span> <span class="k">as</span> <span class="nn">sns</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Generating Fisher matrix plot.&quot;</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">10</span><span class="p">))</span>
<span class="c1"># Normalisation for the colourmap</span>
<span class="n">F0min</span><span class="p">,</span> <span class="n">F0max</span> <span class="o">=</span> <span class="n">F0</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">F0</span><span class="o">.</span><span class="n">max</span><span class="p">()</span>
<span class="n">center</span> <span class="o">=</span> <span class="mi">0</span> <span class="k">if</span> <span class="n">F0min</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">F0max</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="k">else</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">F0</span><span class="p">)</span>
<span class="n">divnorm</span> <span class="o">=</span> <span class="n">colors</span><span class="o">.</span><span class="n">TwoSlopeNorm</span><span class="p">(</span><span class="n">vmin</span><span class="o">=</span><span class="n">F0min</span><span class="p">,</span> <span class="n">vcenter</span><span class="o">=</span><span class="n">center</span><span class="p">,</span> <span class="n">vmax</span><span class="o">=</span><span class="n">F0max</span><span class="p">)</span>
<span class="c1"># Plot the Fisher matrix</span>
<span class="n">sns</span><span class="o">.</span><span class="n">heatmap</span><span class="p">(</span>
<span class="n">F0</span><span class="p">,</span>
<span class="n">annot</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">fmt</span><span class="o">=</span><span class="s2">&quot;.2e&quot;</span><span class="p">,</span>
<span class="n">cmap</span><span class="o">=</span><span class="s2">&quot;RdBu_r&quot;</span><span class="p">,</span>
<span class="n">norm</span><span class="o">=</span><span class="n">divnorm</span><span class="p">,</span>
<span class="n">square</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">cbar_kws</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;shrink&quot;</span><span class="p">:</span> <span class="mf">0.8</span><span class="p">},</span>
<span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xticks</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">params_names_fisher</span><span class="p">))</span> <span class="o">+</span> <span class="mf">0.5</span><span class="p">,</span> <span class="n">params_names_fisher</span><span class="p">,</span> <span class="n">rotation</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">yticks</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">params_names_fisher</span><span class="p">))</span> <span class="o">+</span> <span class="mf">0.5</span><span class="p">,</span> <span class="n">params_names_fisher</span><span class="p">,</span> <span class="n">rotation</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="n">title</span> <span class="ow">or</span> <span class="s2">&quot;Fisher matrix&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">path</span><span class="p">:</span>
<span class="n">path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="k">for</span> <span class="n">fmt</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;png&quot;</span><span class="p">,</span> <span class="s2">&quot;pdf&quot;</span><span class="p">]:</span>
<span class="n">plt</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span>
<span class="n">path</span><span class="o">.</span><span class="n">with_suffix</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;.</span><span class="si">{</span><span class="n">fmt</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">),</span>
<span class="n">bbox_inches</span><span class="o">=</span><span class="s2">&quot;tight&quot;</span><span class="p">,</span>
<span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span>
<span class="nb">format</span><span class="o">=</span><span class="n">fmt</span><span class="p">,</span>
<span class="n">transparent</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Figure saved to </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">path</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Displaying plot.&quot;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">critical</span><span class="p">(</span><span class="s2">&quot;Unexpected error during Fisher matrix plotting: </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;Fisher matrix plotting failed.&quot;</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">e</span>
<span class="k">finally</span><span class="p">:</span>
<span class="n">plt</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="n">gc</span><span class="o">.</span><span class="n">collect</span><span class="p">()</span></div>
<div class="viewcode-block" id="plot_mocks_compact">
<a class="viewcode-back" href="../../../selfisys.utils.html#selfisys.utils.plot_utils.plot_mocks_compact">[docs]</a>
<span class="k">def</span> <span class="nf">plot_mocks_compact</span><span class="p">(</span>
<span class="n">NORM</span><span class="p">,</span>
<span class="n">N</span><span class="p">,</span>
<span class="n">P</span><span class="p">,</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">phi_obs</span><span class="p">,</span>
<span class="n">Phi_0</span><span class="p">,</span>
<span class="n">f_0</span><span class="p">,</span>
<span class="n">C_0</span><span class="p">,</span>
<span class="n">suptitle</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">force_plot</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">savepath</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Plot and compare observed and simulated power spectra.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> NORM : float</span>
<span class="sd"> Normalisation factor for the observed spectra.</span>
<span class="sd"> N : int</span>
<span class="sd"> Number of mock data realisations.</span>
<span class="sd"> P : int</span>
<span class="sd"> Number of bins for the summaries.</span>
<span class="sd"> Pbins : ndarray</span>
<span class="sd"> Vector of bin boundaries for the summary statistics.</span>
<span class="sd"> phi_obs : ndarray</span>
<span class="sd"> Observed power spectrum.</span>
<span class="sd"> Phi_0 : ndarray</span>
<span class="sd"> Mock realisations of the power spectrum.</span>
<span class="sd"> f_0 : ndarray</span>
<span class="sd"> Mean power spectrum.</span>
<span class="sd"> C_0 : ndarray</span>
<span class="sd"> Covariance matrix of the mock summaries.</span>
<span class="sd"> suptitle : str, optional</span>
<span class="sd"> Title for the plot.</span>
<span class="sd"> force_plot : bool, optional</span>
<span class="sd"> If True, displays the plot even if a path is specified.</span>
<span class="sd"> savepath : str or Path, optional</span>
<span class="sd"> Path to save the plot.</span>
<span class="sd"> Raises</span>
<span class="sd"> ------</span>
<span class="sd"> RuntimeError</span>
<span class="sd"> If an unexpected error occurs during plotting.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Plotting mock power spectra (compact)...&quot;</span><span class="p">)</span>
<span class="n">alpha_mocks</span> <span class="o">=</span> <span class="mf">0.25</span>
<span class="n">alpha_binning</span> <span class="o">=</span> <span class="mf">0.3</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">Phi_0_full</span> <span class="o">=</span> <span class="n">Phi_0</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="n">phi_obs_full</span> <span class="o">=</span> <span class="n">phi_obs</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="n">f_0_full</span> <span class="o">=</span> <span class="n">f_0</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="n">C_0_full</span> <span class="o">=</span> <span class="n">C_0</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="n">idx</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">Phi_0</span> <span class="o">=</span> <span class="n">Phi_0</span><span class="p">[:,</span> <span class="n">idx</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">]</span>
<span class="n">phi_obs</span> <span class="o">=</span> <span class="n">phi_obs</span><span class="p">[</span><span class="n">idx</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">]</span>
<span class="n">f_0</span> <span class="o">=</span> <span class="n">f_0</span><span class="p">[</span><span class="n">idx</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">]</span>
<span class="n">C_0</span> <span class="o">=</span> <span class="n">C_0</span><span class="p">[</span><span class="n">idx</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">,</span> <span class="n">idx</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">]</span>
<span class="n">COLOUR_LIST_means</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;darkorchid&quot;</span><span class="p">,</span> <span class="s2">&quot;saddlebrown&quot;</span><span class="p">,</span> <span class="s2">&quot;mediumvioletred&quot;</span><span class="p">]</span>
<span class="n">fig</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">10</span><span class="p">))</span>
<span class="n">gs0</span> <span class="o">=</span> <span class="n">gridspec</span><span class="o">.</span><span class="n">GridSpec</span><span class="p">(</span>
<span class="mi">3</span><span class="p">,</span>
<span class="mi">2</span><span class="p">,</span>
<span class="n">width_ratios</span><span class="o">=</span><span class="p">[</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">],</span>
<span class="n">height_ratios</span><span class="o">=</span><span class="p">[</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">],</span>
<span class="n">wspace</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span>
<span class="n">hspace</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">gs0</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">right</span><span class="o">=</span><span class="mf">1.0</span><span class="p">,</span> <span class="n">left</span><span class="o">=</span><span class="mf">0.0</span><span class="p">)</span>
<span class="n">ax0</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs0</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">])</span>
<span class="n">ax0b</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs0</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span>
<span class="n">ax01</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs0</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="n">sharex</span><span class="o">=</span><span class="n">ax0</span><span class="p">)</span>
<span class="n">ax01b</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs0</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span>
<span class="n">ax02</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs0</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="n">sharex</span><span class="o">=</span><span class="n">ax0</span><span class="p">)</span>
<span class="n">ax02b</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs0</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span>
<span class="n">axx0x</span> <span class="o">=</span> <span class="p">[[</span><span class="n">ax01</span><span class="p">,</span> <span class="n">ax01b</span><span class="p">],</span> <span class="p">[</span><span class="n">ax02</span><span class="p">,</span> <span class="n">ax02b</span><span class="p">]]</span>
<span class="c1"># Observed power spectrum (normalised)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">phi_obs</span> <span class="o">*</span> <span class="n">NORM</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;black&quot;</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;$\boldsymbol{\Phi}_\mathrm</span><span class="si">{O}</span><span class="s2">$&quot;</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># Realisations at the expansion point</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">N</span> <span class="o">-</span> <span class="mi">1</span><span class="p">):</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span><span class="n">Pbins</span><span class="p">,</span> <span class="n">Phi_0</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">color</span><span class="o">=</span><span class="s2">&quot;C7&quot;</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="n">alpha_mocks</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mf">0.7</span><span class="p">)</span>
<span class="c1"># Average value</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">Phi_0</span><span class="p">[</span><span class="n">N</span> <span class="o">-</span> <span class="mi">1</span><span class="p">],</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;C7&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="n">alpha_mocks</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.7</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">f_0</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="n">COLOUR_LIST_means</span><span class="p">[</span><span class="n">idx</span><span class="p">],</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;$\textbf</span><span class="si">{f}</span><span class="s2">_0$&quot;</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># 2-sigma intervals</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">fill_between</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">f_0</span> <span class="o">-</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">C_0</span><span class="p">)),</span>
<span class="n">f_0</span> <span class="o">+</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">C_0</span><span class="p">)),</span>
<span class="n">color</span><span class="o">=</span><span class="n">COLOUR_LIST</span><span class="p">[</span><span class="n">idx</span><span class="p">],</span>
<span class="n">alpha</span><span class="o">=</span><span class="mf">0.4</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;2 $\sqrt{\mathrm</span><span class="si">{diag}</span><span class="s2">(\textbf</span><span class="si">{C}</span><span class="s2">_0)}$&quot;</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># Plot the binning</span>
<span class="p">(</span><span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span><span class="p">)</span> <span class="o">=</span> <span class="n">ax0</span><span class="o">.</span><span class="n">get_ylim</span><span class="p">()</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">([</span><span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span><span class="p">])</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">Pbins</span><span class="p">)):</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="p">(</span><span class="n">Pbins</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">Pbins</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span>
<span class="p">(</span><span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span><span class="p">),</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.8</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;red&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="n">alpha_binning</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">([</span><span class="n">Pbins</span><span class="o">.</span><span class="n">min</span><span class="p">()</span> <span class="o">-</span> <span class="mf">0.0001</span><span class="p">,</span> <span class="n">Pbins</span><span class="o">.</span><span class="n">max</span><span class="p">()</span> <span class="o">+</span> <span class="mf">0.01</span><span class="p">])</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s2">&quot;population 1&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">legend</span><span class="p">(</span><span class="n">fontsize</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">,</span> <span class="n">loc</span><span class="o">=</span><span class="s2">&quot;upper right&quot;</span><span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_ticks_position</span><span class="p">(</span><span class="s2">&quot;both&quot;</span><span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span>
<span class="k">for</span> <span class="n">axis</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;top&quot;</span><span class="p">,</span> <span class="s2">&quot;bottom&quot;</span><span class="p">,</span> <span class="s2">&quot;left&quot;</span><span class="p">,</span> <span class="s2">&quot;right&quot;</span><span class="p">]:</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">spines</span><span class="p">[</span><span class="n">axis</span><span class="p">]</span><span class="o">.</span><span class="n">set_linewidth</span><span class="p">(</span><span class="mf">1.0</span><span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;minor&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
<span class="k">if</span> <span class="n">suptitle</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span>
<span class="sa">r</span><span class="s2">&quot;$\boldsymbol{\Phi}$ (&quot;</span> <span class="o">+</span> <span class="n">suptitle</span> <span class="o">+</span> <span class="s2">&quot;)&quot;</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="mf">1.05</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="n">GLOBAL_FS_LARGE</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;$\boldsymbol{\Phi}$&quot;</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="mf">1.05</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="n">GLOBAL_FS_LARGE</span><span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">&quot;y&quot;</span><span class="p">,</span> <span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS_TINY</span><span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_major_formatter</span><span class="p">(</span><span class="n">FormatStrFormatter</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">%.1f</span><span class="s2">&quot;</span><span class="p">))</span>
<span class="c1"># Same as above but normalise everything by the observations:</span>
<span class="n">normalisation</span> <span class="o">=</span> <span class="n">phi_obs</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">([</span><span class="n">Pbins</span><span class="o">.</span><span class="n">min</span><span class="p">()</span> <span class="o">-</span> <span class="mf">0.0001</span><span class="p">,</span> <span class="n">Pbins</span><span class="o">.</span><span class="n">max</span><span class="p">()</span> <span class="o">+</span> <span class="mf">0.01</span><span class="p">])</span>
<span class="c1"># Observed power spectrum (normalised)</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">NORM</span> <span class="o">*</span> <span class="n">phi_obs</span> <span class="o">/</span> <span class="n">normalisation</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;black&quot;</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;$\boldsymbol{\Phi}_\mathrm</span><span class="si">{O}</span><span class="s2">$&quot;</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">N</span> <span class="o">-</span> <span class="mi">1</span><span class="p">):</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">Phi_0</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">/</span> <span class="n">normalisation</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;C7&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="n">alpha_mocks</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.7</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">Phi_0</span><span class="p">[</span><span class="n">N</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">/</span> <span class="n">normalisation</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;C7&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="n">alpha_mocks</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.7</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;$\boldsymbol{\Phi}_{\theta_0}$&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">f_0</span> <span class="o">/</span> <span class="n">normalisation</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="n">COLOUR_LIST_means</span><span class="p">[</span><span class="n">idx</span><span class="p">],</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;$\textbf</span><span class="si">{f}</span><span class="s2">_0$&quot;</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># 2-sigma intervals</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">fill_between</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">f_0</span> <span class="o">/</span> <span class="n">normalisation</span> <span class="o">-</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">C_0</span><span class="p">))</span> <span class="o">/</span> <span class="n">normalisation</span><span class="p">,</span>
<span class="n">f_0</span> <span class="o">/</span> <span class="n">normalisation</span> <span class="o">+</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">C_0</span><span class="p">))</span> <span class="o">/</span> <span class="n">normalisation</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="n">COLOUR_LIST</span><span class="p">[</span><span class="n">idx</span><span class="p">],</span>
<span class="n">alpha</span><span class="o">=</span><span class="mf">0.4</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;2 $\sqrt{\mathrm</span><span class="si">{diag}</span><span class="s2">(\textbf</span><span class="si">{C}</span><span class="s2">_0)}$&quot;</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># Plot the binning</span>
<span class="p">(</span><span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span><span class="p">)</span> <span class="o">=</span> <span class="n">ax0b</span><span class="o">.</span><span class="n">get_ylim</span><span class="p">()</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">([</span><span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span><span class="p">])</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">Pbins</span><span class="p">)):</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="p">(</span><span class="n">Pbins</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">Pbins</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span>
<span class="p">(</span><span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span><span class="p">),</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.8</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;red&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="n">alpha_binning</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;$k$ [$h$/Mpc]&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">)</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_ticks_position</span><span class="p">(</span><span class="s2">&quot;both&quot;</span><span class="p">)</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span>
<span class="k">for</span> <span class="n">axis</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;top&quot;</span><span class="p">,</span> <span class="s2">&quot;bottom&quot;</span><span class="p">,</span> <span class="s2">&quot;left&quot;</span><span class="p">,</span> <span class="s2">&quot;right&quot;</span><span class="p">]:</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">spines</span><span class="p">[</span><span class="n">axis</span><span class="p">]</span><span class="o">.</span><span class="n">set_linewidth</span><span class="p">(</span><span class="mf">1.0</span><span class="p">)</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">)</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;minor&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">&quot;y&quot;</span><span class="p">,</span> <span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS_TINY</span><span class="p">)</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">tick_right</span><span class="p">()</span>
<span class="k">if</span> <span class="n">suptitle</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span>
<span class="sa">r</span><span class="s2">&quot;$\boldsymbol{\Phi}/\boldsymbol{\Phi}_\mathrm</span><span class="si">{O}</span><span class="s2">$ (&quot;</span> <span class="o">+</span> <span class="n">suptitle</span> <span class="o">+</span> <span class="s2">&quot;)&quot;</span><span class="p">,</span>
<span class="n">y</span><span class="o">=</span><span class="mf">1.05</span><span class="p">,</span>
<span class="n">fontsize</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span>
<span class="sa">r</span><span class="s2">&quot;$\boldsymbol{\Phi}/\boldsymbol{\Phi}_\mathrm</span><span class="si">{O}</span><span class="s2">$&quot;</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="mf">1.05</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="n">GLOBAL_FS</span>
<span class="p">)</span>
<span class="k">for</span> <span class="n">ax</span><span class="p">,</span> <span class="n">axb</span> <span class="ow">in</span> <span class="n">axx0x</span><span class="p">:</span>
<span class="n">idx</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">Phi_0</span> <span class="o">=</span> <span class="n">Phi_0_full</span><span class="p">[:,</span> <span class="n">idx</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">]</span>
<span class="n">phi_obs</span> <span class="o">=</span> <span class="n">phi_obs_full</span><span class="p">[</span><span class="n">idx</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">]</span>
<span class="n">f_0</span> <span class="o">=</span> <span class="n">f_0_full</span><span class="p">[</span><span class="n">idx</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">]</span>
<span class="n">C_0</span> <span class="o">=</span> <span class="n">C_0_full</span><span class="p">[</span><span class="n">idx</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">,</span> <span class="n">idx</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">]</span>
<span class="c1"># Same plot but for the other axes:</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">([</span><span class="n">Pbins</span><span class="o">.</span><span class="n">min</span><span class="p">()</span> <span class="o">-</span> <span class="mf">0.0001</span><span class="p">,</span> <span class="n">Pbins</span><span class="o">.</span><span class="n">max</span><span class="p">()</span> <span class="o">+</span> <span class="mf">0.01</span><span class="p">])</span>
<span class="c1"># Observed power spectrum (normalised)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span><span class="n">Pbins</span><span class="p">,</span> <span class="n">phi_obs</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s2">&quot;black&quot;</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">N</span> <span class="o">-</span> <span class="mi">1</span><span class="p">):</span>
<span class="n">ax</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span><span class="n">Pbins</span><span class="p">,</span> <span class="n">Phi_0</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">color</span><span class="o">=</span><span class="s2">&quot;C7&quot;</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="n">alpha_mocks</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mf">0.7</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span><span class="n">Pbins</span><span class="p">,</span> <span class="n">Phi_0</span><span class="p">[</span><span class="n">N</span> <span class="o">-</span> <span class="mi">1</span><span class="p">],</span> <span class="n">color</span><span class="o">=</span><span class="s2">&quot;C7&quot;</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="n">alpha_mocks</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mf">0.7</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">f_0</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="n">COLOUR_LIST_means</span><span class="p">[</span><span class="n">idx</span><span class="p">],</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;$\textbf</span><span class="si">{f}</span><span class="s2">_0$&quot;</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># 2-sigma intervals</span>
<span class="n">ax</span><span class="o">.</span><span class="n">fill_between</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">f_0</span> <span class="o">-</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">C_0</span><span class="p">)),</span>
<span class="n">f_0</span> <span class="o">+</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">C_0</span><span class="p">)),</span>
<span class="n">color</span><span class="o">=</span><span class="n">COLOUR_LIST</span><span class="p">[</span><span class="n">idx</span><span class="p">],</span>
<span class="n">alpha</span><span class="o">=</span><span class="mf">0.4</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;2 $\sqrt{\mathrm</span><span class="si">{diag}</span><span class="s2">(\textbf</span><span class="si">{C}</span><span class="s2">_0)}$&quot;</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># Plot the binning:</span>
<span class="p">(</span><span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span><span class="p">)</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">get_ylim</span><span class="p">()</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">([</span><span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span><span class="p">])</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">Pbins</span><span class="p">)):</span>
<span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="p">(</span><span class="n">Pbins</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">Pbins</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span>
<span class="p">(</span><span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span><span class="p">),</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.8</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;red&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="n">alpha_binning</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s2">&quot;population &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">),</span> <span class="n">size</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;$k$ [$h$/Mpc]&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">&quot;x&quot;</span><span class="p">,</span> <span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS_SMALL</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="mi">8</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_ticks_position</span><span class="p">(</span><span class="s2">&quot;both&quot;</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">&quot;y&quot;</span><span class="p">,</span> <span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS_TINY</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_major_formatter</span><span class="p">(</span><span class="n">FormatStrFormatter</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">%.1f</span><span class="s2">&quot;</span><span class="p">))</span>
<span class="k">for</span> <span class="n">axis</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;top&quot;</span><span class="p">,</span> <span class="s2">&quot;bottom&quot;</span><span class="p">,</span> <span class="s2">&quot;left&quot;</span><span class="p">,</span> <span class="s2">&quot;right&quot;</span><span class="p">]:</span>
<span class="n">ax</span><span class="o">.</span><span class="n">spines</span><span class="p">[</span><span class="n">axis</span><span class="p">]</span><span class="o">.</span><span class="n">set_linewidth</span><span class="p">(</span><span class="mf">1.0</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;minor&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">legend</span><span class="p">(</span><span class="n">loc</span><span class="o">=</span><span class="s2">&quot;upper right&quot;</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">)</span>
<span class="c1"># Normalise everything by the observations:</span>
<span class="n">normalisation</span> <span class="o">=</span> <span class="n">phi_obs</span>
<span class="n">axb</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">([</span><span class="n">Pbins</span><span class="o">.</span><span class="n">min</span><span class="p">()</span> <span class="o">-</span> <span class="mf">0.0001</span><span class="p">,</span> <span class="n">Pbins</span><span class="o">.</span><span class="n">max</span><span class="p">()</span> <span class="o">+</span> <span class="mf">0.01</span><span class="p">])</span>
<span class="c1"># Observed power spectrum (normalised)</span>
<span class="n">axb</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">phi_obs</span> <span class="o">/</span> <span class="n">normalisation</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;black&quot;</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;$\boldsymbol{\Phi}_\mathrm</span><span class="si">{O}</span><span class="s2">$&quot;</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">N</span> <span class="o">-</span> <span class="mi">1</span><span class="p">):</span>
<span class="n">axb</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">Phi_0</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">/</span> <span class="n">normalisation</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;C7&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="n">alpha_mocks</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.7</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">axb</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">Phi_0</span><span class="p">[</span><span class="n">N</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">/</span> <span class="n">normalisation</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;C7&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="n">alpha_mocks</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.7</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;$\boldsymbol{\Phi}_{\theta_0}$&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">axb</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">f_0</span> <span class="o">/</span> <span class="n">normalisation</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="n">COLOUR_LIST_means</span><span class="p">[</span><span class="n">idx</span><span class="p">],</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;$\textbf</span><span class="si">{f}</span><span class="s2">_0$&quot;</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># 2-sigma intervals</span>
<span class="n">axb</span><span class="o">.</span><span class="n">fill_between</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">f_0</span> <span class="o">/</span> <span class="n">normalisation</span> <span class="o">-</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">C_0</span><span class="p">))</span> <span class="o">/</span> <span class="n">normalisation</span><span class="p">,</span>
<span class="n">f_0</span> <span class="o">/</span> <span class="n">normalisation</span> <span class="o">+</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">C_0</span><span class="p">))</span> <span class="o">/</span> <span class="n">normalisation</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="n">COLOUR_LIST</span><span class="p">[</span><span class="n">idx</span><span class="p">],</span>
<span class="n">alpha</span><span class="o">=</span><span class="mf">0.4</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;2 $\sqrt{\mathrm</span><span class="si">{diag}</span><span class="s2">(\textbf</span><span class="si">{C}</span><span class="s2">_0)}$&quot;</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># Plot the binning</span>
<span class="p">(</span><span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span><span class="p">)</span> <span class="o">=</span> <span class="n">axb</span><span class="o">.</span><span class="n">get_ylim</span><span class="p">()</span>
<span class="n">axb</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">([</span><span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span><span class="p">])</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">Pbins</span><span class="p">)):</span>
<span class="n">axb</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="p">(</span><span class="n">Pbins</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">Pbins</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span>
<span class="p">(</span><span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span><span class="p">),</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.8</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;red&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="n">alpha_binning</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">axb</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;$k$ [$h$/Mpc]&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">)</span>
<span class="n">axb</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">&quot;x&quot;</span><span class="p">,</span> <span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS_SMALL</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="mi">8</span><span class="p">)</span>
<span class="n">axb</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_ticks_position</span><span class="p">(</span><span class="s2">&quot;both&quot;</span><span class="p">)</span>
<span class="n">axb</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span>
<span class="n">axb</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">&quot;y&quot;</span><span class="p">,</span> <span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS_TINY</span><span class="p">)</span>
<span class="n">axb</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">tick_right</span><span class="p">()</span>
<span class="k">for</span> <span class="n">axis</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;top&quot;</span><span class="p">,</span> <span class="s2">&quot;bottom&quot;</span><span class="p">,</span> <span class="s2">&quot;left&quot;</span><span class="p">,</span> <span class="s2">&quot;right&quot;</span><span class="p">]:</span>
<span class="n">axb</span><span class="o">.</span><span class="n">spines</span><span class="p">[</span><span class="n">axis</span><span class="p">]</span><span class="o">.</span><span class="n">set_linewidth</span><span class="p">(</span><span class="mf">1.0</span><span class="p">)</span>
<span class="n">axb</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">)</span>
<span class="n">axb</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;minor&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
<span class="k">if</span> <span class="n">savepath</span><span class="p">:</span>
<span class="n">savepath</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">savepath</span><span class="p">)</span>
<span class="k">for</span> <span class="n">fmt</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;png&quot;</span><span class="p">,</span> <span class="s2">&quot;pdf&quot;</span><span class="p">]:</span>
<span class="n">fig</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">savepath</span><span class="o">.</span><span class="n">with_suffix</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;.</span><span class="si">{</span><span class="n">fmt</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">),</span> <span class="n">bbox_inches</span><span class="o">=</span><span class="s2">&quot;tight&quot;</span><span class="p">,</span> <span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Plot saved to </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">savepath</span><span class="p">)</span>
<span class="k">if</span> <span class="n">force_plot</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">savepath</span><span class="p">:</span>
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">critical</span><span class="p">(</span><span class="s2">&quot;Unexpected error during plotting: </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;Plotting failed.&quot;</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">e</span>
<span class="k">finally</span><span class="p">:</span>
<span class="n">plt</span><span class="o">.</span><span class="n">close</span><span class="p">(</span><span class="n">fig</span><span class="p">)</span>
<span class="k">del</span> <span class="n">fig</span><span class="p">,</span> <span class="n">ax0</span><span class="p">,</span> <span class="n">ax0b</span><span class="p">,</span> <span class="n">ax01</span><span class="p">,</span> <span class="n">ax01b</span><span class="p">,</span> <span class="n">ax02</span><span class="p">,</span> <span class="n">ax02b</span>
<span class="n">gc</span><span class="o">.</span><span class="n">collect</span><span class="p">()</span></div>
<div class="viewcode-block" id="plot_C">
<a class="viewcode-back" href="../../../selfisys.utils.html#selfisys.utils.plot_utils.plot_C">[docs]</a>
<span class="k">def</span> <span class="nf">plot_C</span><span class="p">(</span>
<span class="n">C_0</span><span class="p">,</span>
<span class="n">X</span><span class="p">,</span>
<span class="n">Y</span><span class="p">,</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">CMap</span><span class="p">,</span>
<span class="n">binning</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">suptitle</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">savepath</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">force</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Plot covariance matrix.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> C_0 : ndarray</span>
<span class="sd"> Covariance matrix.</span>
<span class="sd"> X : ndarray</span>
<span class="sd"> X-axis grid for plotting.</span>
<span class="sd"> Y : ndarray</span>
<span class="sd"> Y-axis grid for plotting.</span>
<span class="sd"> Pbins : ndarray</span>
<span class="sd"> Vector of bin boundaries for the summary statistics.</span>
<span class="sd"> CMap : str</span>
<span class="sd"> Colormap for the plot.</span>
<span class="sd"> binning : bool, optional</span>
<span class="sd"> Whether to overlay bin lines on the plot. Default is True.</span>
<span class="sd"> suptitle : str, optional</span>
<span class="sd"> Title for the plot. If None, a default title is used.</span>
<span class="sd"> savepath : str or Path, optional</span>
<span class="sd"> Path to save the plot. If None, the plot is displayed.</span>
<span class="sd"> force : bool, optional</span>
<span class="sd"> If True, displays the plot even if savepath is specified.</span>
<span class="sd"> Raises</span>
<span class="sd"> ------</span>
<span class="sd"> RuntimeError</span>
<span class="sd"> If unexpected errors occur during plotting.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">product</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Plotting covariance matrix...&quot;</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">fig</span><span class="p">,</span> <span class="n">axs</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">13</span><span class="p">,</span> <span class="mi">11</span><span class="p">))</span>
<span class="n">P</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">Pbins</span><span class="p">)</span>
<span class="c1"># Determine vmin, vmax and central value for TwoSlopeNorm</span>
<span class="n">vmin</span><span class="p">,</span> <span class="n">vmax</span> <span class="o">=</span> <span class="n">C_0</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">C_0</span><span class="o">.</span><span class="n">max</span><span class="p">()</span>
<span class="n">centerval</span> <span class="o">=</span> <span class="mi">0</span> <span class="k">if</span> <span class="n">vmin</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">vmax</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="k">else</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">C_0</span><span class="p">)</span>
<span class="n">divnorm</span> <span class="o">=</span> <span class="n">colors</span><span class="o">.</span><span class="n">TwoSlopeNorm</span><span class="p">(</span><span class="n">vmin</span><span class="o">=</span><span class="n">vmin</span><span class="p">,</span> <span class="n">vcenter</span><span class="o">=</span><span class="n">centerval</span><span class="p">,</span> <span class="n">vmax</span><span class="o">=</span><span class="n">vmax</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">product</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="mi">3</span><span class="p">),</span> <span class="nb">range</span><span class="p">(</span><span class="mi">3</span><span class="p">)):</span>
<span class="n">C_0_ij</span> <span class="o">=</span> <span class="n">C_0</span><span class="p">[</span><span class="n">i</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">,</span> <span class="n">j</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">j</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">]</span>
<span class="n">imat</span> <span class="o">=</span> <span class="mi">2</span> <span class="o">-</span> <span class="n">i</span> <span class="c1"># Invert to place origin at bottom left</span>
<span class="n">ax</span> <span class="o">=</span> <span class="n">axs</span><span class="p">[</span><span class="n">imat</span><span class="p">,</span> <span class="n">j</span><span class="p">]</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_aspect</span><span class="p">(</span><span class="s2">&quot;equal&quot;</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_xscale</span><span class="p">(</span><span class="s2">&quot;log&quot;</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_yscale</span><span class="p">(</span><span class="s2">&quot;log&quot;</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_ticks_position</span><span class="p">(</span><span class="s2">&quot;both&quot;</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_ticks_position</span><span class="p">(</span><span class="s2">&quot;both&quot;</span><span class="p">)</span>
<span class="c1"># Plot the covariance matrix</span>
<span class="n">im1</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">pcolormesh</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">Y</span><span class="p">,</span> <span class="n">C_0_ij</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="n">shading</span><span class="o">=</span><span class="s2">&quot;flat&quot;</span><span class="p">,</span> <span class="n">norm</span><span class="o">=</span><span class="n">divnorm</span><span class="p">,</span> <span class="n">cmap</span><span class="o">=</span><span class="n">CMap</span><span class="p">)</span>
<span class="c1"># Overlay the binning grid (if enabled)</span>
<span class="k">if</span> <span class="n">binning</span><span class="p">:</span>
<span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">Pbins</span><span class="p">)):</span>
<span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="p">(</span><span class="n">Pbins</span><span class="p">[</span><span class="n">n</span><span class="p">],</span> <span class="n">Pbins</span><span class="p">[</span><span class="n">n</span><span class="p">]),</span>
<span class="p">(</span><span class="n">Pbins</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">Pbins</span><span class="o">.</span><span class="n">max</span><span class="p">()),</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;red&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="p">(</span><span class="n">Pbins</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">Pbins</span><span class="o">.</span><span class="n">max</span><span class="p">()),</span>
<span class="p">(</span><span class="n">Pbins</span><span class="p">[</span><span class="n">n</span><span class="p">],</span> <span class="n">Pbins</span><span class="p">[</span><span class="n">n</span><span class="p">]),</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;red&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># Custom ticks for boundary axes</span>
<span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">ax</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span>
<span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS</span>
<span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;minor&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_xticks</span><span class="p">([])</span>
<span class="k">if</span> <span class="n">j</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">ax</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span>
<span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS</span>
<span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;minor&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_yticks</span><span class="p">([])</span>
<span class="c1"># Set title and adjust layout</span>
<span class="n">suptitle</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">&quot;$\textbf</span><span class="si">{C}</span><span class="s2">_0$&quot;</span> <span class="k">if</span> <span class="n">suptitle</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="sa">r</span><span class="s2">&quot;$\textbf</span><span class="si">{C}</span><span class="s2">_0$ (&quot;</span> <span class="o">+</span> <span class="n">suptitle</span> <span class="o">+</span> <span class="s2">&quot;)&quot;</span>
<span class="n">plt</span><span class="o">.</span><span class="n">suptitle</span><span class="p">(</span><span class="n">suptitle</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="mf">0.94</span><span class="p">,</span> <span class="n">x</span><span class="o">=</span><span class="mf">0.45</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">GLOBAL_FS</span> <span class="o">+</span> <span class="n">GLOBAL_FS_XLARGE</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">subplots_adjust</span><span class="p">(</span><span class="n">wspace</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">hspace</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># Colourbar</span>
<span class="n">cbar</span> <span class="o">=</span> <span class="n">fig</span><span class="o">.</span><span class="n">colorbar</span><span class="p">(</span>
<span class="n">im1</span><span class="p">,</span> <span class="n">ax</span><span class="o">=</span><span class="n">axs</span><span class="o">.</span><span class="n">ravel</span><span class="p">()</span><span class="o">.</span><span class="n">tolist</span><span class="p">(),</span> <span class="n">shrink</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="mf">0.009</span><span class="p">,</span> <span class="n">aspect</span><span class="o">=</span><span class="mi">40</span><span class="p">,</span> <span class="n">orientation</span><span class="o">=</span><span class="s2">&quot;vertical&quot;</span>
<span class="p">)</span>
<span class="n">cbar</span><span class="o">.</span><span class="n">ax</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span>
<span class="n">axis</span><span class="o">=</span><span class="s2">&quot;y&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS_LARGE</span>
<span class="p">)</span>
<span class="n">cbar</span><span class="o">.</span><span class="n">update_normal</span><span class="p">(</span><span class="n">im1</span><span class="p">)</span>
<span class="n">cbar</span><span class="o">.</span><span class="n">mappable</span><span class="o">.</span><span class="n">set_clim</span><span class="p">(</span><span class="n">vmin</span><span class="o">=</span><span class="n">C_0</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">vmax</span><span class="o">=</span><span class="n">C_0</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">max</span><span class="p">())</span>
<span class="n">loc_xticks</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">([</span><span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="n">vmin</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">5</span><span class="p">),</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">vmax</span><span class="p">,</span> <span class="mi">5</span><span class="p">)[</span><span class="mi">1</span><span class="p">:]])</span>
<span class="n">val_xticks</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">round</span><span class="p">(</span><span class="n">loc_xticks</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="n">cbar</span><span class="o">.</span><span class="n">set_ticks</span><span class="p">(</span><span class="n">loc_xticks</span><span class="p">,</span> <span class="n">labels</span><span class="o">=</span><span class="n">val_xticks</span><span class="p">)</span>
<span class="c1"># Axis labels</span>
<span class="n">fig</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="mf">0.45</span><span class="p">,</span> <span class="mf">0.04</span><span class="p">,</span> <span class="sa">r</span><span class="s2">&quot;$k$ [$h$/Mpc]&quot;</span><span class="p">,</span> <span class="n">ha</span><span class="o">=</span><span class="s2">&quot;center&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">GLOBAL_FS_XLARGE</span><span class="p">)</span>
<span class="n">fig</span><span class="o">.</span><span class="n">text</span><span class="p">(</span>
<span class="mf">0.04</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">,</span> <span class="sa">r</span><span class="s2">&quot;$k&#39;$ [$h$/Mpc]&quot;</span><span class="p">,</span> <span class="n">va</span><span class="o">=</span><span class="s2">&quot;center&quot;</span><span class="p">,</span> <span class="n">rotation</span><span class="o">=</span><span class="s2">&quot;vertical&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">GLOBAL_FS_XLARGE</span>
<span class="p">)</span>
<span class="c1"># Save / display</span>
<span class="k">if</span> <span class="n">savepath</span><span class="p">:</span>
<span class="n">savepath</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">savepath</span><span class="p">)</span>
<span class="n">savepath</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">fig</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">savepath</span><span class="p">,</span> <span class="n">bbox_inches</span><span class="o">=</span><span class="s2">&quot;tight&quot;</span><span class="p">,</span> <span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="s2">&quot;png&quot;</span><span class="p">,</span> <span class="n">transparent</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">fig</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">savepath</span><span class="o">.</span><span class="n">with_suffix</span><span class="p">(</span><span class="s2">&quot;.pdf&quot;</span><span class="p">),</span> <span class="n">bbox_inches</span><span class="o">=</span><span class="s2">&quot;tight&quot;</span><span class="p">,</span> <span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Plot saved to </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">savepath</span><span class="p">)</span>
<span class="k">if</span> <span class="n">force</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">savepath</span><span class="p">:</span>
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">critical</span><span class="p">(</span><span class="s2">&quot;Unexpected error during plotting: </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;Plotting failed.&quot;</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">e</span>
<span class="k">finally</span><span class="p">:</span>
<span class="n">plt</span><span class="o">.</span><span class="n">close</span><span class="p">(</span><span class="n">fig</span><span class="p">)</span>
<span class="k">del</span> <span class="n">fig</span><span class="p">,</span> <span class="n">axs</span><span class="p">,</span> <span class="n">im1</span>
<span class="n">gc</span><span class="o">.</span><span class="n">collect</span><span class="p">()</span></div>
<div class="viewcode-block" id="plot_prior_and_posterior_covariances">
<a class="viewcode-back" href="../../../selfisys.utils.html#selfisys.utils.plot_utils.plot_prior_and_posterior_covariances">[docs]</a>
<span class="k">def</span> <span class="nf">plot_prior_and_posterior_covariances</span><span class="p">(</span>
<span class="n">X</span><span class="p">,</span>
<span class="n">Y</span><span class="p">,</span>
<span class="n">k_s</span><span class="p">,</span>
<span class="n">prior_theta_covariance</span><span class="p">,</span>
<span class="n">prior_covariance</span><span class="p">,</span>
<span class="n">posterior_theta_covariance</span><span class="p">,</span>
<span class="n">P_0</span><span class="p">,</span>
<span class="n">force_plot</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">suptitle</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="n">savepath</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Plot prior and posterior covariance matrices.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> X : ndarray</span>
<span class="sd"> X-axis grid.</span>
<span class="sd"> Y : ndarray</span>
<span class="sd"> Y-axis grid.</span>
<span class="sd"> k_s : ndarray</span>
<span class="sd"> Wavenumbers.</span>
<span class="sd"> prior_theta_covariance : ndarray</span>
<span class="sd"> Prior covariance matrix for normalised spectra.</span>
<span class="sd"> prior_covariance : ndarray</span>
<span class="sd"> Prior covariance matrix for unnormalised spectra.</span>
<span class="sd"> posterior_theta_covariance : ndarray</span>
<span class="sd"> Posterior covariance matrix for normalised spectra.</span>
<span class="sd"> P_0 : ndarray</span>
<span class="sd"> Fiducial power spectrum used for normalisation.</span>
<span class="sd"> force_plot : bool, optional</span>
<span class="sd"> Display plot even if savepath is set.</span>
<span class="sd"> suptitle : str, optional</span>
<span class="sd"> Title for the plot.</span>
<span class="sd"> savepath : str or Path, optional</span>
<span class="sd"> Path to save the plot. If None, the plot is displayed.</span>
<span class="sd"> verbose : int, optional</span>
<span class="sd"> Verbosity level (0=silent, 1=default, 2=detailed).</span>
<span class="sd"> Raises</span>
<span class="sd"> ------</span>
<span class="sd"> RuntimeError</span>
<span class="sd"> If unexpected errors occur during plotting.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">mpl_toolkits.axes_grid1</span> <span class="kn">import</span> <span class="n">make_axes_locatable</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Plotting prior and posterior covariance matrices...&quot;</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">fig</span><span class="p">,</span> <span class="p">((</span><span class="n">ax0</span><span class="p">,</span> <span class="n">ax1</span><span class="p">),</span> <span class="p">(</span><span class="n">ax2</span><span class="p">,</span> <span class="n">ax3</span><span class="p">))</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">15</span><span class="p">,</span> <span class="mi">14</span><span class="p">),</span> <span class="n">nrows</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">ncols</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
<span class="n">fig</span><span class="o">.</span><span class="n">suptitle</span><span class="p">(</span><span class="n">suptitle</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="n">GLOBAL_FS_XLARGE</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="mf">0.99</span><span class="p">)</span>
<span class="c1"># Covariance matrix of the prior (normalised spectra theta)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">set_aspect</span><span class="p">(</span><span class="s2">&quot;equal&quot;</span><span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">set_xscale</span><span class="p">(</span><span class="s2">&quot;log&quot;</span><span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">set_yscale</span><span class="p">(</span><span class="s2">&quot;log&quot;</span><span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_ticks_position</span><span class="p">(</span><span class="s2">&quot;both&quot;</span><span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_ticks_position</span><span class="p">(</span><span class="s2">&quot;both&quot;</span><span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;minor&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;minor&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
<span class="n">divider</span> <span class="o">=</span> <span class="n">make_axes_locatable</span><span class="p">(</span><span class="n">ax0</span><span class="p">)</span>
<span class="n">ax0_cb</span> <span class="o">=</span> <span class="n">divider</span><span class="o">.</span><span class="n">new_horizontal</span><span class="p">(</span><span class="n">size</span><span class="o">=</span><span class="s2">&quot;5%&quot;</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="mf">0.10</span><span class="p">)</span>
<span class="n">im0</span> <span class="o">=</span> <span class="n">ax0</span><span class="o">.</span><span class="n">pcolormesh</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">Y</span><span class="p">,</span> <span class="n">prior_theta_covariance</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="n">cmap</span><span class="o">=</span><span class="s2">&quot;Blues&quot;</span><span class="p">,</span> <span class="n">shading</span><span class="o">=</span><span class="s2">&quot;flat&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">k_s</span><span class="p">)):</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="p">(</span><span class="n">k_s</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">k_s</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span>
<span class="p">(</span><span class="n">k_s</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">k_s</span><span class="o">.</span><span class="n">max</span><span class="p">()),</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;:&quot;</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;green&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">k_s</span><span class="p">)):</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="p">(</span><span class="n">k_s</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">k_s</span><span class="o">.</span><span class="n">max</span><span class="p">()),</span>
<span class="p">(</span><span class="n">k_s</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">k_s</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;:&quot;</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;green&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="s2">&quot;$</span><span class="se">\\</span><span class="s2">textbf</span><span class="si">{S}</span><span class="s2">$&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">GLOBAL_FS_XLARGE</span><span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s2">&quot;$k$ [$h$/Mpc]&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">GLOBAL_FS_XLARGE</span><span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s2">&quot;$k$ [$h$/Mpc]&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">GLOBAL_FS_XLARGE</span><span class="p">)</span>
<span class="n">fig</span><span class="o">.</span><span class="n">add_axes</span><span class="p">(</span><span class="n">ax0_cb</span><span class="p">)</span>
<span class="n">cbar0</span> <span class="o">=</span> <span class="n">fig</span><span class="o">.</span><span class="n">colorbar</span><span class="p">(</span><span class="n">im0</span><span class="p">,</span> <span class="n">cax</span><span class="o">=</span><span class="n">ax0_cb</span><span class="p">)</span>
<span class="n">cbar0</span><span class="o">.</span><span class="n">ax</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">&quot;y&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">)</span>
<span class="c1"># Covariance matrix of the prior (unnormalized spectra)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">set_aspect</span><span class="p">(</span><span class="s2">&quot;equal&quot;</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">set_xscale</span><span class="p">(</span><span class="s2">&quot;log&quot;</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">set_yscale</span><span class="p">(</span><span class="s2">&quot;log&quot;</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_ticks_position</span><span class="p">(</span><span class="s2">&quot;both&quot;</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_ticks_position</span><span class="p">(</span><span class="s2">&quot;both&quot;</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;minor&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;minor&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
<span class="n">divider</span> <span class="o">=</span> <span class="n">make_axes_locatable</span><span class="p">(</span><span class="n">ax1</span><span class="p">)</span>
<span class="n">ax1_cb</span> <span class="o">=</span> <span class="n">divider</span><span class="o">.</span><span class="n">new_horizontal</span><span class="p">(</span><span class="n">size</span><span class="o">=</span><span class="s2">&quot;5%&quot;</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="mf">0.10</span><span class="p">)</span>
<span class="n">im1</span> <span class="o">=</span> <span class="n">ax1</span><span class="o">.</span><span class="n">pcolormesh</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">Y</span><span class="p">,</span> <span class="n">prior_covariance</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="n">cmap</span><span class="o">=</span><span class="s2">&quot;Purples&quot;</span><span class="p">,</span> <span class="n">shading</span><span class="o">=</span><span class="s2">&quot;flat&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">k_s</span><span class="p">)):</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="p">(</span><span class="n">k_s</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">k_s</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span>
<span class="p">(</span><span class="n">k_s</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">k_s</span><span class="o">.</span><span class="n">max</span><span class="p">()),</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;:&quot;</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;green&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">k_s</span><span class="p">)):</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="p">(</span><span class="n">k_s</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">k_s</span><span class="o">.</span><span class="n">max</span><span class="p">()),</span>
<span class="p">(</span><span class="n">k_s</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">k_s</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;:&quot;</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;green&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span>
<span class="s2">&quot;$</span><span class="se">\\</span><span class="s2">mathrm</span><span class="si">{diag}</span><span class="s2">(</span><span class="se">\\</span><span class="s2">textbf</span><span class="si">{P}</span><span class="s2">_0) </span><span class="se">\\</span><span class="s2">cdot </span><span class="se">\\</span><span class="s2">textbf</span><span class="si">{S}</span><span class="s2"> </span><span class="se">\\</span><span class="s2">cdot </span><span class="se">\\</span><span class="s2">mathrm</span><span class="si">{diag}</span><span class="s2">(</span><span class="se">\\</span><span class="s2">textbf</span><span class="si">{P}</span><span class="s2">_0)$&quot;</span><span class="p">,</span>
<span class="n">size</span><span class="o">=</span><span class="n">GLOBAL_FS_XLARGE</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s2">&quot;$k$ [$h$/Mpc]&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">GLOBAL_FS_XLARGE</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s2">&quot;$k$ [$h$/Mpc]&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">GLOBAL_FS_XLARGE</span><span class="p">)</span>
<span class="n">fig</span><span class="o">.</span><span class="n">add_axes</span><span class="p">(</span><span class="n">ax1_cb</span><span class="p">)</span>
<span class="n">cbar1</span> <span class="o">=</span> <span class="n">fig</span><span class="o">.</span><span class="n">colorbar</span><span class="p">(</span><span class="n">im1</span><span class="p">,</span> <span class="n">cax</span><span class="o">=</span><span class="n">ax1_cb</span><span class="p">)</span>
<span class="n">cbar1</span><span class="o">.</span><span class="n">ax</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">&quot;y&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">)</span>
<span class="n">posterior_covariance</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">P_0</span><span class="p">)</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">posterior_theta_covariance</span><span class="p">)</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">P_0</span><span class="p">))</span>
<span class="c1"># Covariance matrix of the posterior (normalised spectra theta)</span>
<span class="n">ax2</span><span class="o">.</span><span class="n">set_aspect</span><span class="p">(</span><span class="s2">&quot;equal&quot;</span><span class="p">)</span>
<span class="n">ax2</span><span class="o">.</span><span class="n">set_xscale</span><span class="p">(</span><span class="s2">&quot;log&quot;</span><span class="p">)</span>
<span class="n">ax2</span><span class="o">.</span><span class="n">set_yscale</span><span class="p">(</span><span class="s2">&quot;log&quot;</span><span class="p">)</span>
<span class="n">ax2</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_ticks_position</span><span class="p">(</span><span class="s2">&quot;both&quot;</span><span class="p">)</span>
<span class="n">ax2</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_ticks_position</span><span class="p">(</span><span class="s2">&quot;both&quot;</span><span class="p">)</span>
<span class="n">ax2</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span>
<span class="n">ax2</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">)</span>
<span class="n">ax2</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;minor&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
<span class="n">ax2</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span>
<span class="n">ax2</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">)</span>
<span class="n">ax2</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;minor&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
<span class="n">divider</span> <span class="o">=</span> <span class="n">make_axes_locatable</span><span class="p">(</span><span class="n">ax2</span><span class="p">)</span>
<span class="n">ax2_cb</span> <span class="o">=</span> <span class="n">divider</span><span class="o">.</span><span class="n">new_horizontal</span><span class="p">(</span><span class="n">size</span><span class="o">=</span><span class="s2">&quot;5%&quot;</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="mf">0.10</span><span class="p">)</span>
<span class="n">quantity</span> <span class="o">=</span> <span class="n">posterior_theta_covariance</span>
<span class="n">vmin</span> <span class="o">=</span> <span class="n">quantity</span><span class="o">.</span><span class="n">min</span><span class="p">()</span>
<span class="n">vmax</span> <span class="o">=</span> <span class="n">quantity</span><span class="o">.</span><span class="n">max</span><span class="p">()</span>
<span class="k">if</span> <span class="n">vmin</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">vmax</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">centerval</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">centerval</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">quantity</span><span class="p">)</span>
<span class="n">norm_posterior</span> <span class="o">=</span> <span class="n">colors</span><span class="o">.</span><span class="n">TwoSlopeNorm</span><span class="p">(</span>
<span class="n">vmin</span><span class="o">=</span><span class="n">posterior_theta_covariance</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span>
<span class="n">vcenter</span><span class="o">=</span><span class="n">centerval</span><span class="p">,</span>
<span class="n">vmax</span><span class="o">=</span><span class="n">posterior_theta_covariance</span><span class="o">.</span><span class="n">max</span><span class="p">(),</span>
<span class="p">)</span>
<span class="n">Blues_Reds</span> <span class="o">=</span> <span class="n">create_colormap</span><span class="p">(</span><span class="s2">&quot;Blues_Reds&quot;</span><span class="p">)</span>
<span class="n">im2</span> <span class="o">=</span> <span class="n">ax2</span><span class="o">.</span><span class="n">pcolormesh</span><span class="p">(</span>
<span class="n">X</span><span class="p">,</span>
<span class="n">Y</span><span class="p">,</span>
<span class="n">posterior_theta_covariance</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span>
<span class="n">cmap</span><span class="o">=</span><span class="n">Blues_Reds</span><span class="p">,</span>
<span class="n">norm</span><span class="o">=</span><span class="n">norm_posterior</span><span class="p">,</span>
<span class="n">shading</span><span class="o">=</span><span class="s2">&quot;flat&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">k_s</span><span class="p">)):</span>
<span class="n">ax2</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="p">(</span><span class="n">k_s</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">k_s</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span>
<span class="p">(</span><span class="n">k_s</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">k_s</span><span class="o">.</span><span class="n">max</span><span class="p">()),</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;:&quot;</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;green&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">k_s</span><span class="p">)):</span>
<span class="n">ax2</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="p">(</span><span class="n">k_s</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">k_s</span><span class="o">.</span><span class="n">max</span><span class="p">()),</span>
<span class="p">(</span><span class="n">k_s</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">k_s</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;:&quot;</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;green&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">ax2</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="s2">&quot;$</span><span class="se">\\</span><span class="s2">boldsymbol{</span><span class="se">\\</span><span class="s2">Gamma}$&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">GLOBAL_FS_XLARGE</span><span class="p">)</span>
<span class="n">ax2</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s2">&quot;$k$ [$h$/Mpc]&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">GLOBAL_FS_XLARGE</span><span class="p">)</span>
<span class="n">ax2</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s2">&quot;$k$ [$h$/Mpc]&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">GLOBAL_FS_XLARGE</span><span class="p">)</span>
<span class="n">fig</span><span class="o">.</span><span class="n">add_axes</span><span class="p">(</span><span class="n">ax2_cb</span><span class="p">)</span>
<span class="n">cbar2</span> <span class="o">=</span> <span class="n">fig</span><span class="o">.</span><span class="n">colorbar</span><span class="p">(</span><span class="n">im2</span><span class="p">,</span> <span class="n">cax</span><span class="o">=</span><span class="n">ax2_cb</span><span class="p">)</span>
<span class="n">cbar2</span><span class="o">.</span><span class="n">ax</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">&quot;y&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">)</span>
<span class="n">cbar2</span><span class="o">.</span><span class="n">mappable</span><span class="o">.</span><span class="n">set_clim</span><span class="p">(</span>
<span class="n">vmin</span><span class="o">=</span><span class="n">posterior_theta_covariance</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">vmax</span><span class="o">=</span><span class="n">posterior_theta_covariance</span><span class="o">.</span><span class="n">max</span><span class="p">()</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">posterior_theta_covariance</span><span class="o">.</span><span class="n">min</span><span class="p">()</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">posterior_theta_covariance</span><span class="o">.</span><span class="n">max</span><span class="p">()</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">ticks</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">(</span>
<span class="p">[</span>
<span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="n">posterior_theta_covariance</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">5</span><span class="p">),</span>
<span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">posterior_theta_covariance</span><span class="o">.</span><span class="n">max</span><span class="p">(),</span> <span class="mi">5</span><span class="p">)[</span><span class="mi">1</span><span class="p">:],</span>
<span class="p">]</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">ticks</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span>
<span class="n">posterior_theta_covariance</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">posterior_theta_covariance</span><span class="o">.</span><span class="n">max</span><span class="p">(),</span> <span class="mi">6</span>
<span class="p">)</span>
<span class="n">ticks_labels</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;</span><span class="si">{:.1e}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">tick</span><span class="p">)</span> <span class="k">for</span> <span class="n">tick</span> <span class="ow">in</span> <span class="n">ticks</span><span class="p">]</span>
<span class="n">cbar2</span><span class="o">.</span><span class="n">set_ticks</span><span class="p">(</span><span class="n">ticks</span><span class="p">)</span>
<span class="n">cbar2</span><span class="o">.</span><span class="n">set_ticklabels</span><span class="p">(</span><span class="n">ticks_labels</span><span class="p">)</span>
<span class="c1"># Covariance matrix of the posterior (unnormalised spectra)</span>
<span class="n">ax3</span><span class="o">.</span><span class="n">set_aspect</span><span class="p">(</span><span class="s2">&quot;equal&quot;</span><span class="p">)</span>
<span class="n">ax3</span><span class="o">.</span><span class="n">set_xscale</span><span class="p">(</span><span class="s2">&quot;log&quot;</span><span class="p">)</span>
<span class="n">ax3</span><span class="o">.</span><span class="n">set_yscale</span><span class="p">(</span><span class="s2">&quot;log&quot;</span><span class="p">)</span>
<span class="n">ax3</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_ticks_position</span><span class="p">(</span><span class="s2">&quot;both&quot;</span><span class="p">)</span>
<span class="n">ax3</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_ticks_position</span><span class="p">(</span><span class="s2">&quot;both&quot;</span><span class="p">)</span>
<span class="n">ax3</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span>
<span class="n">ax3</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">)</span>
<span class="n">ax3</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;minor&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
<span class="n">ax3</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span>
<span class="n">ax3</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">)</span>
<span class="n">ax3</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;minor&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
<span class="n">divider</span> <span class="o">=</span> <span class="n">make_axes_locatable</span><span class="p">(</span><span class="n">ax3</span><span class="p">)</span>
<span class="n">ax3_cb</span> <span class="o">=</span> <span class="n">divider</span><span class="o">.</span><span class="n">new_horizontal</span><span class="p">(</span><span class="n">size</span><span class="o">=</span><span class="s2">&quot;5%&quot;</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="mf">0.10</span><span class="p">)</span>
<span class="n">quantity</span> <span class="o">=</span> <span class="n">posterior_covariance</span>
<span class="n">vmin</span> <span class="o">=</span> <span class="n">quantity</span><span class="o">.</span><span class="n">min</span><span class="p">()</span>
<span class="n">vmax</span> <span class="o">=</span> <span class="n">quantity</span><span class="o">.</span><span class="n">max</span><span class="p">()</span>
<span class="k">if</span> <span class="n">vmin</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">vmax</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">centerval</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">centerval</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">quantity</span><span class="p">)</span>
<span class="n">norm_posterior_spectrum</span> <span class="o">=</span> <span class="n">colors</span><span class="o">.</span><span class="n">TwoSlopeNorm</span><span class="p">(</span>
<span class="n">vmin</span><span class="o">=</span><span class="n">posterior_covariance</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span>
<span class="n">vcenter</span><span class="o">=</span><span class="n">centerval</span><span class="p">,</span>
<span class="n">vmax</span><span class="o">=</span><span class="n">posterior_covariance</span><span class="o">.</span><span class="n">max</span><span class="p">(),</span>
<span class="p">)</span>
<span class="n">Purples_Oranges</span> <span class="o">=</span> <span class="n">create_colormap</span><span class="p">(</span><span class="s2">&quot;Purples_Oranges&quot;</span><span class="p">)</span>
<span class="n">im3</span> <span class="o">=</span> <span class="n">ax3</span><span class="o">.</span><span class="n">pcolormesh</span><span class="p">(</span>
<span class="n">X</span><span class="p">,</span>
<span class="n">Y</span><span class="p">,</span>
<span class="n">posterior_covariance</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span>
<span class="n">cmap</span><span class="o">=</span><span class="n">Purples_Oranges</span><span class="p">,</span>
<span class="n">norm</span><span class="o">=</span><span class="n">norm_posterior_spectrum</span><span class="p">,</span>
<span class="n">shading</span><span class="o">=</span><span class="s2">&quot;flat&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">k_s</span><span class="p">)):</span>
<span class="n">ax3</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="p">(</span><span class="n">k_s</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">k_s</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span>
<span class="p">(</span><span class="n">k_s</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">k_s</span><span class="o">.</span><span class="n">max</span><span class="p">()),</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;:&quot;</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;green&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">k_s</span><span class="p">)):</span>
<span class="n">ax3</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="p">(</span><span class="n">k_s</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">k_s</span><span class="o">.</span><span class="n">max</span><span class="p">()),</span>
<span class="p">(</span><span class="n">k_s</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">k_s</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;:&quot;</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;green&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">ax3</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span>
<span class="s2">&quot;$</span><span class="se">\\</span><span class="s2">mathrm</span><span class="si">{diag}</span><span class="s2">(</span><span class="se">\\</span><span class="s2">textbf</span><span class="si">{P}</span><span class="s2">_0) </span><span class="se">\\</span><span class="s2">cdot </span><span class="se">\\</span><span class="s2">boldsymbol{</span><span class="se">\\</span><span class="s2">Gamma} </span><span class="se">\\</span><span class="s2">cdot </span><span class="se">\\</span><span class="s2">mathrm</span><span class="si">{diag}</span><span class="s2">(</span><span class="se">\\</span><span class="s2">textbf</span><span class="si">{P}</span><span class="s2">_0)$&quot;</span><span class="p">,</span>
<span class="n">size</span><span class="o">=</span><span class="mi">22</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">ax3</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s2">&quot;$k$ [$h$/Mpc]&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">22</span><span class="p">)</span>
<span class="n">ax3</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s2">&quot;$k$ [$h$/Mpc]&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">22</span><span class="p">)</span>
<span class="n">fig</span><span class="o">.</span><span class="n">add_axes</span><span class="p">(</span><span class="n">ax3_cb</span><span class="p">)</span>
<span class="n">cbar3</span> <span class="o">=</span> <span class="n">fig</span><span class="o">.</span><span class="n">colorbar</span><span class="p">(</span><span class="n">im3</span><span class="p">,</span> <span class="n">cax</span><span class="o">=</span><span class="n">ax3_cb</span><span class="p">)</span>
<span class="n">cbar3</span><span class="o">.</span><span class="n">ax</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">&quot;y&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="mi">19</span><span class="p">)</span>
<span class="n">cbar3</span><span class="o">.</span><span class="n">ax</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">&quot;y&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="mi">19</span><span class="p">)</span>
<span class="n">cbar3</span><span class="o">.</span><span class="n">mappable</span><span class="o">.</span><span class="n">set_clim</span><span class="p">(</span><span class="n">vmin</span><span class="o">=</span><span class="n">posterior_covariance</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">vmax</span><span class="o">=</span><span class="n">posterior_covariance</span><span class="o">.</span><span class="n">max</span><span class="p">())</span>
<span class="k">if</span> <span class="n">posterior_covariance</span><span class="o">.</span><span class="n">min</span><span class="p">()</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">posterior_covariance</span><span class="o">.</span><span class="n">max</span><span class="p">()</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">ticks</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">(</span>
<span class="p">[</span>
<span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="n">posterior_covariance</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">5</span><span class="p">),</span>
<span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">posterior_covariance</span><span class="o">.</span><span class="n">max</span><span class="p">(),</span> <span class="mi">5</span><span class="p">)[</span><span class="mi">1</span><span class="p">:],</span>
<span class="p">]</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">ticks</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="n">posterior_covariance</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">posterior_covariance</span><span class="o">.</span><span class="n">max</span><span class="p">(),</span> <span class="mi">6</span><span class="p">)</span>
<span class="n">ticks_labels</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;</span><span class="si">{:.1e}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">tick</span><span class="p">)</span> <span class="k">for</span> <span class="n">tick</span> <span class="ow">in</span> <span class="n">ticks</span><span class="p">]</span>
<span class="n">cbar3</span><span class="o">.</span><span class="n">set_ticks</span><span class="p">(</span><span class="n">ticks</span><span class="p">)</span>
<span class="n">cbar3</span><span class="o">.</span><span class="n">set_ticklabels</span><span class="p">(</span><span class="n">ticks_labels</span><span class="p">)</span>
<span class="n">fig</span><span class="o">.</span><span class="n">tight_layout</span><span class="p">()</span>
<span class="k">if</span> <span class="n">savepath</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">fig</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">savepath</span><span class="p">,</span> <span class="n">bbox_inches</span><span class="o">=</span><span class="s2">&quot;tight&quot;</span><span class="p">,</span> <span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="s2">&quot;png&quot;</span><span class="p">,</span> <span class="n">transparent</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">fig</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">savepath</span><span class="p">[:</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">+</span> <span class="s2">&quot;.pdf&quot;</span><span class="p">,</span> <span class="n">bbox_inches</span><span class="o">=</span><span class="s2">&quot;tight&quot;</span><span class="p">,</span> <span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="s2">&quot;pdf&quot;</span><span class="p">)</span>
<span class="n">fig</span><span class="o">.</span><span class="n">suptitle</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="n">fig</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span>
<span class="n">savepath</span><span class="p">[:</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">+</span> <span class="s2">&quot;_notitle.png&quot;</span><span class="p">,</span>
<span class="n">bbox_inches</span><span class="o">=</span><span class="s2">&quot;tight&quot;</span><span class="p">,</span>
<span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span>
<span class="nb">format</span><span class="o">=</span><span class="s2">&quot;png&quot;</span><span class="p">,</span>
<span class="n">transparent</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">fig</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">savepath</span><span class="p">[:</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">+</span> <span class="s2">&quot;_notitle.pdf&quot;</span><span class="p">,</span> <span class="n">bbox_inches</span><span class="o">=</span><span class="s2">&quot;tight&quot;</span><span class="p">,</span> <span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="s2">&quot;pdf&quot;</span><span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Plot saved to </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">savepath</span><span class="p">)</span>
<span class="k">if</span> <span class="n">force_plot</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">savepath</span><span class="p">:</span>
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">critical</span><span class="p">(</span><span class="s2">&quot;Unexpected error during plotting: </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;Plotting failed.&quot;</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">e</span>
<span class="k">finally</span><span class="p">:</span>
<span class="n">plt</span><span class="o">.</span><span class="n">close</span><span class="p">(</span><span class="n">fig</span><span class="p">)</span>
<span class="k">del</span> <span class="n">fig</span>
<span class="n">gc</span><span class="o">.</span><span class="n">collect</span><span class="p">()</span></div>
<div class="viewcode-block" id="plot_gradients">
<a class="viewcode-back" href="../../../selfisys.utils.html#selfisys.utils.plot_utils.plot_gradients">[docs]</a>
<span class="k">def</span> <span class="nf">plot_gradients</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">P</span><span class="p">,</span>
<span class="n">df_16_full</span><span class="p">,</span>
<span class="n">df_32_full</span><span class="p">,</span>
<span class="n">df_48_full</span><span class="p">,</span>
<span class="n">df_full</span><span class="p">,</span>
<span class="n">k_s</span><span class="p">,</span>
<span class="n">X</span><span class="p">,</span>
<span class="n">Y</span><span class="p">,</span>
<span class="n">fixscale</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">force</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">suptitle</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="n">savepath</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Plot gradients.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> Pbins : ndarray</span>
<span class="sd"> Vector of bin boundaries for the summary statistics.</span>
<span class="sd"> P : int</span>
<span class="sd"> Number of bins.</span>
<span class="sd"> df_16_full : ndarray</span>
<span class="sd"> Derivative with respect to the 16th input.</span>
<span class="sd"> df_32_full : ndarray</span>
<span class="sd"> Derivative with respect to the 32nd input.</span>
<span class="sd"> df_48_full : ndarray</span>
<span class="sd"> Derivative with respect to the 48th input.</span>
<span class="sd"> df_full : ndarray</span>
<span class="sd"> Full derivative.</span>
<span class="sd"> k_s : ndarray</span>
<span class="sd"> Wavenumbers.</span>
<span class="sd"> X : ndarray</span>
<span class="sd"> X-axis grid.</span>
<span class="sd"> Y : ndarray</span>
<span class="sd"> Y-axis grid.</span>
<span class="sd"> fixscale : bool, optional</span>
<span class="sd"> Fix the y-axis scale. Default is False.</span>
<span class="sd"> force : bool, optional</span>
<span class="sd"> Display plot even if savepath is set.</span>
<span class="sd"> suptitle : str, optional</span>
<span class="sd"> Title for the plot.</span>
<span class="sd"> savepath : str or Path, optional</span>
<span class="sd"> Path to save the plot. If None, the plot is displayed.</span>
<span class="sd"> Raises</span>
<span class="sd"> ------</span>
<span class="sd"> RuntimeError</span>
<span class="sd"> If unexpected errors occur during plotting.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Plotting gradients...&quot;</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">fig</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">15</span><span class="p">,</span> <span class="mi">12</span><span class="p">))</span>
<span class="n">fig</span><span class="o">.</span><span class="n">suptitle</span><span class="p">(</span><span class="n">suptitle</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="mf">0.95</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">22</span><span class="p">)</span>
<span class="n">gs0</span> <span class="o">=</span> <span class="n">gridspec</span><span class="o">.</span><span class="n">GridSpec</span><span class="p">(</span>
<span class="mi">3</span><span class="p">,</span>
<span class="mi">2</span><span class="p">,</span>
<span class="n">width_ratios</span><span class="o">=</span><span class="p">[</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">],</span>
<span class="n">height_ratios</span><span class="o">=</span><span class="p">[</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">],</span>
<span class="n">hspace</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span>
<span class="n">wspace</span><span class="o">=</span><span class="mf">0.2</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">gs0</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">right</span><span class="o">=</span><span class="mf">1.0</span><span class="p">,</span> <span class="n">left</span><span class="o">=</span><span class="mf">0.0</span><span class="p">)</span>
<span class="n">ax00</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs0</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">])</span>
<span class="n">ax01</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs0</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="n">sharex</span><span class="o">=</span><span class="n">ax00</span><span class="p">)</span>
<span class="n">ax02</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs0</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="n">sharex</span><span class="o">=</span><span class="n">ax00</span><span class="p">)</span>
<span class="n">gs1</span> <span class="o">=</span> <span class="n">gridspec</span><span class="o">.</span><span class="n">GridSpec</span><span class="p">(</span>
<span class="mi">3</span><span class="p">,</span>
<span class="mi">2</span><span class="p">,</span>
<span class="n">width_ratios</span><span class="o">=</span><span class="p">[</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">],</span>
<span class="n">height_ratios</span><span class="o">=</span><span class="p">[</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">],</span>
<span class="n">hspace</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span>
<span class="n">wspace</span><span class="o">=</span><span class="mf">0.2</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">gs1</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">top</span><span class="o">=</span><span class="mf">0.881</span><span class="p">,</span> <span class="n">bottom</span><span class="o">=</span><span class="mf">0.112</span><span class="p">)</span>
<span class="n">ax10</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs1</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span>
<span class="n">ax11</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs1</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="n">sharex</span><span class="o">=</span><span class="n">ax10</span><span class="p">)</span>
<span class="n">ax12</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs1</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="n">sharex</span><span class="o">=</span><span class="n">ax10</span><span class="p">)</span>
<span class="n">axx</span> <span class="o">=</span> <span class="p">[(</span><span class="n">ax00</span><span class="p">,</span> <span class="n">ax10</span><span class="p">),</span> <span class="p">(</span><span class="n">ax01</span><span class="p">,</span> <span class="n">ax11</span><span class="p">),</span> <span class="p">(</span><span class="n">ax02</span><span class="p">,</span> <span class="n">ax12</span><span class="p">)]</span>
<span class="k">for</span> <span class="n">axs</span><span class="p">,</span> <span class="n">idx</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">axx</span><span class="p">,</span> <span class="nb">range</span><span class="p">(</span><span class="mi">3</span><span class="p">)):</span>
<span class="n">ax</span> <span class="o">=</span> <span class="n">axs</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">df_16</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">df_16_full</span><span class="p">[</span><span class="n">idx</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">])</span>
<span class="n">df_32</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">df_32_full</span><span class="p">[</span><span class="n">idx</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">])</span>
<span class="n">df_48</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">df_48_full</span><span class="p">[</span><span class="n">idx</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">])</span>
<span class="n">df</span> <span class="o">=</span> <span class="n">df_full</span><span class="p">[</span><span class="n">idx</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">]</span>
<span class="c1"># Plot the three selected components of the derivative:</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">([</span><span class="n">Pbins</span><span class="o">.</span><span class="n">min</span><span class="p">()</span> <span class="o">-</span> <span class="mf">0.0001</span><span class="p">,</span> <span class="n">Pbins</span><span class="o">.</span><span class="n">max</span><span class="p">()</span> <span class="o">+</span> <span class="mf">0.01</span><span class="p">])</span>
<span class="n">ax</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span><span class="n">Pbins</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros_like</span><span class="p">(</span><span class="n">Pbins</span><span class="p">),</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;:&quot;</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s2">&quot;black&quot;</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">df_16</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;-&quot;</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;C4&quot;</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;$(\nabla \mathbf</span><span class="si">{f}</span><span class="s2">_0)^\intercal_</span><span class="si">{16}</span><span class="s2">$&quot;</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">df_32</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;-&quot;</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;C0&quot;</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;$(\nabla \mathbf</span><span class="si">{f}</span><span class="s2">_0)^\intercal_</span><span class="si">{32}</span><span class="s2">$&quot;</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">df_48</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;-&quot;</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;C2&quot;</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;$(\nabla \mathbf</span><span class="si">{f}</span><span class="s2">_0)^\intercal_</span><span class="si">{48}</span><span class="s2">$&quot;</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">fixscale</span><span class="p">:</span>
<span class="n">ymin</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">([</span><span class="n">df_16</span><span class="p">,</span> <span class="n">df_32</span><span class="p">,</span> <span class="n">df_48</span><span class="p">])</span> <span class="o">-</span> <span class="mf">1e-2</span>
<span class="n">ymax</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">([</span><span class="n">df_16</span><span class="p">,</span> <span class="n">df_32</span><span class="p">,</span> <span class="n">df_48</span><span class="p">])</span> <span class="o">+</span> <span class="mf">1e-2</span>
<span class="k">else</span><span class="p">:</span>
<span class="p">(</span><span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span><span class="p">)</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">get_ylim</span><span class="p">()</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">([</span><span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span><span class="p">])</span>
<span class="c1"># Binning</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">Pbins</span><span class="p">)):</span>
<span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="p">(</span><span class="n">Pbins</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">Pbins</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span>
<span class="p">(</span><span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span><span class="p">),</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.8</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;red&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;:&quot;</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s2">&quot;grey&quot;</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s2">&quot;population &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">),</span> <span class="n">size</span><span class="o">=</span><span class="mi">21</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_ticks_position</span><span class="p">(</span><span class="s2">&quot;both&quot;</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_ticks_position</span><span class="p">(</span><span class="s2">&quot;both&quot;</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span>
<span class="k">for</span> <span class="n">axis</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;top&quot;</span><span class="p">,</span> <span class="s2">&quot;bottom&quot;</span><span class="p">,</span> <span class="s2">&quot;left&quot;</span><span class="p">,</span> <span class="s2">&quot;right&quot;</span><span class="p">]:</span>
<span class="n">ax</span><span class="o">.</span><span class="n">spines</span><span class="p">[</span><span class="n">axis</span><span class="p">]</span><span class="o">.</span><span class="n">set_linewidth</span><span class="p">(</span><span class="mf">1.0</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;minor&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">)</span>
<span class="c1"># Plot the full gradient</span>
<span class="n">ax1</span> <span class="o">=</span> <span class="n">axs</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">([</span><span class="n">k_s</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">k_s</span><span class="o">.</span><span class="n">max</span><span class="p">()])</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">([</span><span class="n">Pbins</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">Pbins</span><span class="o">.</span><span class="n">max</span><span class="p">()])</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">set_xscale</span><span class="p">(</span><span class="s2">&quot;log&quot;</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">set_yscale</span><span class="p">(</span><span class="s2">&quot;log&quot;</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_ticks_position</span><span class="p">(</span><span class="s2">&quot;both&quot;</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_ticks_position</span><span class="p">(</span><span class="s2">&quot;both&quot;</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;minor&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;minor&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
<span class="n">quantity</span> <span class="o">=</span> <span class="n">df</span>
<span class="n">vmin</span> <span class="o">=</span> <span class="n">quantity</span><span class="o">.</span><span class="n">min</span><span class="p">()</span>
<span class="n">vmax</span> <span class="o">=</span> <span class="n">quantity</span><span class="o">.</span><span class="n">max</span><span class="p">()</span>
<span class="k">if</span> <span class="n">vmin</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">vmax</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">centerval</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">centerval</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">quantity</span><span class="p">)</span>
<span class="n">norm_grad</span> <span class="o">=</span> <span class="n">colors</span><span class="o">.</span><span class="n">TwoSlopeNorm</span><span class="p">(</span><span class="n">vmin</span><span class="o">=</span><span class="n">vmin</span><span class="p">,</span> <span class="n">vcenter</span><span class="o">=</span><span class="n">centerval</span><span class="p">,</span> <span class="n">vmax</span><span class="o">=</span><span class="n">vmax</span><span class="p">)</span>
<span class="n">GradientMap</span> <span class="o">=</span> <span class="n">create_colormap</span><span class="p">(</span><span class="s2">&quot;GradientMap&quot;</span><span class="p">)</span>
<span class="n">im1</span> <span class="o">=</span> <span class="n">ax1</span><span class="o">.</span><span class="n">pcolormesh</span><span class="p">(</span>
<span class="n">X</span><span class="p">,</span> <span class="n">Y</span><span class="p">,</span> <span class="n">df</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="n">cmap</span><span class="o">=</span><span class="n">GradientMap</span><span class="p">,</span> <span class="n">shading</span><span class="o">=</span><span class="s2">&quot;flat&quot;</span><span class="p">,</span> <span class="n">norm</span><span class="o">=</span><span class="n">norm_grad</span>
<span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">k_s</span><span class="p">,</span> <span class="n">k_s</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s2">&quot;grey&quot;</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">k_s</span><span class="p">)):</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="p">(</span><span class="n">k_s</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">k_s</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span>
<span class="p">(</span><span class="n">Pbins</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">Pbins</span><span class="o">.</span><span class="n">max</span><span class="p">()),</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;:&quot;</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;green&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">Pbins</span><span class="p">)):</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="p">(</span><span class="n">k_s</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">k_s</span><span class="o">.</span><span class="n">max</span><span class="p">()),</span>
<span class="p">(</span><span class="n">Pbins</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">Pbins</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;red&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;$k$ [$h$/Mpc]&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">17</span><span class="p">)</span>
<span class="n">cbar1</span> <span class="o">=</span> <span class="n">fig</span><span class="o">.</span><span class="n">colorbar</span><span class="p">(</span><span class="n">im1</span><span class="p">,</span> <span class="n">shrink</span><span class="o">=</span><span class="mf">0.9</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="mf">0.01</span><span class="p">)</span>
<span class="n">cbar1</span><span class="o">.</span><span class="n">ax</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">&quot;y&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">)</span>
<span class="n">ticks</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">([</span><span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="n">df</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">5</span><span class="p">),</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">df</span><span class="o">.</span><span class="n">max</span><span class="p">(),</span> <span class="mi">5</span><span class="p">)[</span><span class="mi">1</span><span class="p">:]])</span>
<span class="n">cbar1</span><span class="o">.</span><span class="n">set_ticks</span><span class="p">(</span><span class="n">ticks</span><span class="p">)</span>
<span class="k">if</span> <span class="n">idx</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">ax</span><span class="o">.</span><span class="n">legend</span><span class="p">(</span><span class="n">fontsize</span><span class="o">=</span><span class="mi">21</span><span class="p">,</span> <span class="n">loc</span><span class="o">=</span><span class="s2">&quot;upper left&quot;</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;Full gradient $\nabla \mathbf</span><span class="si">{f}</span><span class="s2">_0$&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">21</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">idx</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;$k$ [$h$/Mpc]&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">21</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;$k$ [$h$/Mpc]&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">21</span><span class="p">)</span>
<span class="k">if</span> <span class="n">savepath</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">force</span><span class="p">:</span>
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
<span class="k">if</span> <span class="n">savepath</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">fig</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">savepath</span><span class="p">,</span> <span class="n">bbox_inches</span><span class="o">=</span><span class="s2">&quot;tight&quot;</span><span class="p">,</span> <span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="s2">&quot;png&quot;</span><span class="p">,</span> <span class="n">transparent</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">fig</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">savepath</span><span class="p">[:</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">+</span> <span class="s2">&quot;.pdf&quot;</span><span class="p">,</span> <span class="n">bbox_inches</span><span class="o">=</span><span class="s2">&quot;tight&quot;</span><span class="p">,</span> <span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="s2">&quot;pdf&quot;</span><span class="p">)</span>
<span class="n">fig</span><span class="o">.</span><span class="n">suptitle</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="n">fig</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span>
<span class="n">savepath</span><span class="p">[:</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">+</span> <span class="s2">&quot;_notitle.png&quot;</span><span class="p">,</span>
<span class="n">bbox_inches</span><span class="o">=</span><span class="s2">&quot;tight&quot;</span><span class="p">,</span>
<span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span>
<span class="nb">format</span><span class="o">=</span><span class="s2">&quot;png&quot;</span><span class="p">,</span>
<span class="n">transparent</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">fig</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">savepath</span><span class="p">[:</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">+</span> <span class="s2">&quot;_notitle.pdf&quot;</span><span class="p">,</span> <span class="n">bbox_inches</span><span class="o">=</span><span class="s2">&quot;tight&quot;</span><span class="p">,</span> <span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="s2">&quot;pdf&quot;</span><span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Plot saved to </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">savepath</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">critical</span><span class="p">(</span><span class="s2">&quot;Unexpected error during plotting: </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;Plotting failed.&quot;</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">e</span>
<span class="k">finally</span><span class="p">:</span>
<span class="n">plt</span><span class="o">.</span><span class="n">close</span><span class="p">(</span><span class="n">fig</span><span class="p">)</span>
<span class="k">del</span> <span class="n">fig</span>
<span class="n">gc</span><span class="o">.</span><span class="n">collect</span><span class="p">()</span></div>
<div class="viewcode-block" id="plot_mocks">
<a class="viewcode-back" href="../../../selfisys.utils.html#selfisys.utils.plot_utils.plot_mocks">[docs]</a>
<span class="k">def</span> <span class="nf">plot_mocks</span><span class="p">(</span>
<span class="n">NORM</span><span class="p">,</span>
<span class="n">N</span><span class="p">,</span>
<span class="n">P</span><span class="p">,</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">phi_obs</span><span class="p">,</span>
<span class="n">Phi_0</span><span class="p">,</span>
<span class="n">f_0</span><span class="p">,</span>
<span class="n">C_0</span><span class="p">,</span>
<span class="n">X</span><span class="p">,</span>
<span class="n">Y</span><span class="p">,</span>
<span class="n">CMap</span><span class="p">,</span>
<span class="n">suptitle</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">force_plot</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">savepath</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Plot mocks.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> NORM : float</span>
<span class="sd"> Normalisation factor.</span>
<span class="sd"> N : int</span>
<span class="sd"> Number of mocks.</span>
<span class="sd"> P : int</span>
<span class="sd"> Number of bins.</span>
<span class="sd"> Pbins : ndarray</span>
<span class="sd"> Vector of bin boundaries for the summary statistics.</span>
<span class="sd"> phi_obs : ndarray</span>
<span class="sd"> Observed power spectrum.</span>
<span class="sd"> Phi_0 : ndarray</span>
<span class="sd"> Mock power spectra.</span>
<span class="sd"> f_0 : ndarray</span>
<span class="sd"> Averaged power spectrum.</span>
<span class="sd"> C_0 : ndarray</span>
<span class="sd"> Covariance matrix.</span>
<span class="sd"> X : ndarray</span>
<span class="sd"> X-axis grid.</span>
<span class="sd"> Y : ndarray</span>
<span class="sd"> Y-axis grid.</span>
<span class="sd"> CMap : str</span>
<span class="sd"> Colormap.</span>
<span class="sd"> suptitle : str, optional</span>
<span class="sd"> Title for the plot.</span>
<span class="sd"> force_plot : bool, optional</span>
<span class="sd"> Display plot even if savepath is set.</span>
<span class="sd"> savepath : str or Path, optional</span>
<span class="sd"> Path to save the plot. If None, the plot is displayed.</span>
<span class="sd"> Raises</span>
<span class="sd"> ------</span>
<span class="sd"> RuntimeError</span>
<span class="sd"> If unexpected errors occur during plotting.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Plotting mocks and intra-population covariance...&quot;</span><span class="p">)</span>
<span class="n">alpha_mocks</span> <span class="o">=</span> <span class="mf">0.25</span>
<span class="n">alpha_binning</span> <span class="o">=</span> <span class="mf">0.3</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">Phi_0_full</span> <span class="o">=</span> <span class="n">Phi_0</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="n">phi_obs_full</span> <span class="o">=</span> <span class="n">phi_obs</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="n">f_0_full</span> <span class="o">=</span> <span class="n">f_0</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="n">C_0_full</span> <span class="o">=</span> <span class="n">C_0</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="n">idx</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">Phi_0</span> <span class="o">=</span> <span class="n">Phi_0</span><span class="p">[:,</span> <span class="n">idx</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">]</span>
<span class="n">phi_obs</span> <span class="o">=</span> <span class="n">phi_obs</span><span class="p">[</span><span class="n">idx</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">]</span>
<span class="n">f_0</span> <span class="o">=</span> <span class="n">f_0</span><span class="p">[</span><span class="n">idx</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">]</span>
<span class="n">C_0</span> <span class="o">=</span> <span class="n">C_0</span><span class="p">[</span><span class="n">idx</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">,</span> <span class="n">idx</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">]</span>
<span class="n">COLOUR_LIST_means</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;darkorchid&quot;</span><span class="p">,</span> <span class="s2">&quot;saddlebrown&quot;</span><span class="p">,</span> <span class="s2">&quot;mediumvioletred&quot;</span><span class="p">]</span>
<span class="n">fig</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mf">15.5</span><span class="p">,</span> <span class="mi">10</span><span class="p">))</span>
<span class="n">gs0</span> <span class="o">=</span> <span class="n">gridspec</span><span class="o">.</span><span class="n">GridSpec</span><span class="p">(</span>
<span class="mi">3</span><span class="p">,</span>
<span class="mi">3</span><span class="p">,</span>
<span class="n">width_ratios</span><span class="o">=</span><span class="p">[</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">],</span>
<span class="n">height_ratios</span><span class="o">=</span><span class="p">[</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">],</span>
<span class="n">wspace</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span>
<span class="n">hspace</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">gs0</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">right</span><span class="o">=</span><span class="mf">1.0</span><span class="p">,</span> <span class="n">left</span><span class="o">=</span><span class="mf">0.0</span><span class="p">)</span>
<span class="n">ax0</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs0</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">])</span>
<span class="n">ax0b</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs0</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span>
<span class="n">ax01</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs0</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="n">sharex</span><span class="o">=</span><span class="n">ax0</span><span class="p">)</span>
<span class="n">ax01b</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs0</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span>
<span class="n">ax02</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs0</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="n">sharex</span><span class="o">=</span><span class="n">ax0</span><span class="p">)</span>
<span class="n">ax02b</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs0</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span>
<span class="n">axx0x</span> <span class="o">=</span> <span class="p">[[</span><span class="n">ax01</span><span class="p">,</span> <span class="n">ax01b</span><span class="p">],</span> <span class="p">[</span><span class="n">ax02</span><span class="p">,</span> <span class="n">ax02b</span><span class="p">]]</span>
<span class="c1"># Observed power spectrum (normalised)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">phi_obs</span> <span class="o">*</span> <span class="n">NORM</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;black&quot;</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;$\boldsymbol{\Phi}_\mathrm</span><span class="si">{O}</span><span class="s2">$&quot;</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># Plot the Ne realisations and the average value</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">N</span> <span class="o">-</span> <span class="mi">1</span><span class="p">):</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span><span class="n">Pbins</span><span class="p">,</span> <span class="n">Phi_0</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">color</span><span class="o">=</span><span class="s2">&quot;C7&quot;</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="n">alpha_mocks</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mf">0.7</span><span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">Phi_0</span><span class="p">[</span><span class="n">N</span> <span class="o">-</span> <span class="mi">1</span><span class="p">],</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;C7&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="n">alpha_mocks</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.7</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">f_0</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="n">COLOUR_LIST_means</span><span class="p">[</span><span class="n">idx</span><span class="p">],</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;$\textbf</span><span class="si">{f}</span><span class="s2">_0$&quot;</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># 2-sigma intervals</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">fill_between</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">f_0</span> <span class="o">-</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">C_0</span><span class="p">)),</span>
<span class="n">f_0</span> <span class="o">+</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">C_0</span><span class="p">)),</span>
<span class="n">color</span><span class="o">=</span><span class="n">COLOUR_LIST</span><span class="p">[</span><span class="n">idx</span><span class="p">],</span>
<span class="n">alpha</span><span class="o">=</span><span class="mf">0.4</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;2 $\sqrt{\mathrm</span><span class="si">{diag}</span><span class="s2">(\textbf</span><span class="si">{C}</span><span class="s2">_0)}$&quot;</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># Plot the binning</span>
<span class="p">(</span><span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span><span class="p">)</span> <span class="o">=</span> <span class="n">ax0</span><span class="o">.</span><span class="n">get_ylim</span><span class="p">()</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">([</span><span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span><span class="p">])</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">Pbins</span><span class="p">)):</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="p">(</span><span class="n">Pbins</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">Pbins</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span>
<span class="p">(</span><span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span><span class="p">),</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.8</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;red&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="n">alpha_binning</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">([</span><span class="n">Pbins</span><span class="o">.</span><span class="n">min</span><span class="p">()</span> <span class="o">-</span> <span class="mf">0.0001</span><span class="p">,</span> <span class="n">Pbins</span><span class="o">.</span><span class="n">max</span><span class="p">()</span> <span class="o">+</span> <span class="mf">0.01</span><span class="p">])</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s2">&quot;population 1&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">legend</span><span class="p">(</span><span class="n">fontsize</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">,</span> <span class="n">loc</span><span class="o">=</span><span class="s2">&quot;upper right&quot;</span><span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_ticks_position</span><span class="p">(</span><span class="s2">&quot;both&quot;</span><span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span>
<span class="k">for</span> <span class="n">axis</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;top&quot;</span><span class="p">,</span> <span class="s2">&quot;bottom&quot;</span><span class="p">,</span> <span class="s2">&quot;left&quot;</span><span class="p">,</span> <span class="s2">&quot;right&quot;</span><span class="p">]:</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">spines</span><span class="p">[</span><span class="n">axis</span><span class="p">]</span><span class="o">.</span><span class="n">set_linewidth</span><span class="p">(</span><span class="mf">1.0</span><span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;minor&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
<span class="k">if</span> <span class="n">suptitle</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span>
<span class="sa">r</span><span class="s2">&quot;$\boldsymbol{\Phi}$ (&quot;</span> <span class="o">+</span> <span class="n">suptitle</span> <span class="o">+</span> <span class="s2">&quot;)&quot;</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="mf">1.05</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="n">GLOBAL_FS_LARGE</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;$\boldsymbol{\Phi}$&quot;</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="mf">1.05</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="n">GLOBAL_FS_LARGE</span><span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">&quot;y&quot;</span><span class="p">,</span> <span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS_TINY</span><span class="p">)</span>
<span class="n">ax0</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_major_formatter</span><span class="p">(</span><span class="n">FormatStrFormatter</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">%.1f</span><span class="s2">&quot;</span><span class="p">))</span>
<span class="c1"># Same as above but normalise everything by the observations:</span>
<span class="n">normalisation</span> <span class="o">=</span> <span class="n">phi_obs</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">NORM</span> <span class="o">*</span> <span class="n">phi_obs</span> <span class="o">/</span> <span class="n">normalisation</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;black&quot;</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;$\boldsymbol{\Phi}_\mathrm</span><span class="si">{O}</span><span class="s2">$&quot;</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">N</span> <span class="o">-</span> <span class="mi">1</span><span class="p">):</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">Phi_0</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">/</span> <span class="n">normalisation</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;C7&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="n">alpha_mocks</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.7</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">Phi_0</span><span class="p">[</span><span class="n">N</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">/</span> <span class="n">normalisation</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;C7&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="n">alpha_mocks</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.7</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;$\boldsymbol{\Phi}_{\theta_0}$&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">f_0</span> <span class="o">/</span> <span class="n">normalisation</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="n">COLOUR_LIST_means</span><span class="p">[</span><span class="n">idx</span><span class="p">],</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;$\textbf</span><span class="si">{f}</span><span class="s2">_0$&quot;</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># 2-sigma intervals</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">fill_between</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">f_0</span> <span class="o">/</span> <span class="n">normalisation</span> <span class="o">-</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">C_0</span><span class="p">))</span> <span class="o">/</span> <span class="n">normalisation</span><span class="p">,</span>
<span class="n">f_0</span> <span class="o">/</span> <span class="n">normalisation</span> <span class="o">+</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">C_0</span><span class="p">))</span> <span class="o">/</span> <span class="n">normalisation</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="n">COLOUR_LIST</span><span class="p">[</span><span class="n">idx</span><span class="p">],</span>
<span class="n">alpha</span><span class="o">=</span><span class="mf">0.4</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;2 $\sqrt{\mathrm</span><span class="si">{diag}</span><span class="s2">(\textbf</span><span class="si">{C}</span><span class="s2">_0)}$&quot;</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># Plot the binning</span>
<span class="p">(</span><span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span><span class="p">)</span> <span class="o">=</span> <span class="n">ax0b</span><span class="o">.</span><span class="n">get_ylim</span><span class="p">()</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">([</span><span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span><span class="p">])</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">Pbins</span><span class="p">)):</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="p">(</span><span class="n">Pbins</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">Pbins</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span>
<span class="p">(</span><span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span><span class="p">),</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.8</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;red&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="n">alpha_binning</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">([</span><span class="n">Pbins</span><span class="o">.</span><span class="n">min</span><span class="p">()</span> <span class="o">-</span> <span class="mf">0.0001</span><span class="p">,</span> <span class="n">Pbins</span><span class="o">.</span><span class="n">max</span><span class="p">()</span> <span class="o">+</span> <span class="mf">0.01</span><span class="p">])</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;$k$ [$h$/Mpc]&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">)</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_ticks_position</span><span class="p">(</span><span class="s2">&quot;both&quot;</span><span class="p">)</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span>
<span class="k">for</span> <span class="n">axis</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;top&quot;</span><span class="p">,</span> <span class="s2">&quot;bottom&quot;</span><span class="p">,</span> <span class="s2">&quot;left&quot;</span><span class="p">,</span> <span class="s2">&quot;right&quot;</span><span class="p">]:</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">spines</span><span class="p">[</span><span class="n">axis</span><span class="p">]</span><span class="o">.</span><span class="n">set_linewidth</span><span class="p">(</span><span class="mf">1.0</span><span class="p">)</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">)</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;minor&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">&quot;y&quot;</span><span class="p">,</span> <span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS_TINY</span><span class="p">)</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">tick_right</span><span class="p">()</span>
<span class="k">if</span> <span class="n">suptitle</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span>
<span class="sa">r</span><span class="s2">&quot;$\boldsymbol{\Phi}/\boldsymbol{\Phi}_\mathrm</span><span class="si">{O}</span><span class="s2">$ (&quot;</span> <span class="o">+</span> <span class="n">suptitle</span> <span class="o">+</span> <span class="s2">&quot;)&quot;</span><span class="p">,</span>
<span class="n">y</span><span class="o">=</span><span class="mf">1.05</span><span class="p">,</span>
<span class="n">fontsize</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">ax0b</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span>
<span class="sa">r</span><span class="s2">&quot;$\boldsymbol{\Phi}/\boldsymbol{\Phi}_\mathrm</span><span class="si">{O}</span><span class="s2">$&quot;</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="mf">1.05</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="n">GLOBAL_FS</span>
<span class="p">)</span>
<span class="k">for</span> <span class="n">ax</span><span class="p">,</span> <span class="n">axb</span> <span class="ow">in</span> <span class="n">axx0x</span><span class="p">:</span>
<span class="n">idx</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">Phi_0</span> <span class="o">=</span> <span class="n">Phi_0_full</span><span class="p">[:,</span> <span class="n">idx</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">]</span>
<span class="n">phi_obs</span> <span class="o">=</span> <span class="n">phi_obs_full</span><span class="p">[</span><span class="n">idx</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">]</span>
<span class="n">f_0</span> <span class="o">=</span> <span class="n">f_0_full</span><span class="p">[</span><span class="n">idx</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">]</span>
<span class="n">C_0</span> <span class="o">=</span> <span class="n">C_0_full</span><span class="p">[</span><span class="n">idx</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">,</span> <span class="n">idx</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">]</span>
<span class="c1"># Same plot as above but for the other axes:</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">([</span><span class="n">Pbins</span><span class="o">.</span><span class="n">min</span><span class="p">()</span> <span class="o">-</span> <span class="mf">0.0001</span><span class="p">,</span> <span class="n">Pbins</span><span class="o">.</span><span class="n">max</span><span class="p">()</span> <span class="o">+</span> <span class="mf">0.01</span><span class="p">])</span>
<span class="n">ax</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span><span class="n">Pbins</span><span class="p">,</span> <span class="n">phi_obs</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s2">&quot;black&quot;</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">N</span> <span class="o">-</span> <span class="mi">1</span><span class="p">):</span>
<span class="n">ax</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span><span class="n">Pbins</span><span class="p">,</span> <span class="n">Phi_0</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">color</span><span class="o">=</span><span class="s2">&quot;C7&quot;</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="n">alpha_mocks</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mf">0.7</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span><span class="n">Pbins</span><span class="p">,</span> <span class="n">Phi_0</span><span class="p">[</span><span class="n">N</span> <span class="o">-</span> <span class="mi">1</span><span class="p">],</span> <span class="n">color</span><span class="o">=</span><span class="s2">&quot;C7&quot;</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="n">alpha_mocks</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mf">0.7</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">f_0</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="n">COLOUR_LIST_means</span><span class="p">[</span><span class="n">idx</span><span class="p">],</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;$\textbf</span><span class="si">{f}</span><span class="s2">_0$&quot;</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># 2-sigma intervals</span>
<span class="n">ax</span><span class="o">.</span><span class="n">fill_between</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">f_0</span> <span class="o">-</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">C_0</span><span class="p">)),</span>
<span class="n">f_0</span> <span class="o">+</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">C_0</span><span class="p">)),</span>
<span class="n">color</span><span class="o">=</span><span class="n">COLOUR_LIST</span><span class="p">[</span><span class="n">idx</span><span class="p">],</span>
<span class="n">alpha</span><span class="o">=</span><span class="mf">0.4</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;2 $\sqrt{\mathrm</span><span class="si">{diag}</span><span class="s2">(\textbf</span><span class="si">{C}</span><span class="s2">_0)}$&quot;</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># Plot the binning</span>
<span class="p">(</span><span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span><span class="p">)</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">get_ylim</span><span class="p">()</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">([</span><span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span><span class="p">])</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">Pbins</span><span class="p">)):</span>
<span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="p">(</span><span class="n">Pbins</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">Pbins</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span>
<span class="p">(</span><span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span><span class="p">),</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.8</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;red&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="n">alpha_binning</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s2">&quot;population &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">),</span> <span class="n">size</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;$k$ [$h$/Mpc]&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">&quot;x&quot;</span><span class="p">,</span> <span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS_SMALL</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="mi">8</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_ticks_position</span><span class="p">(</span><span class="s2">&quot;both&quot;</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">&quot;y&quot;</span><span class="p">,</span> <span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS_TINY</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_major_formatter</span><span class="p">(</span><span class="n">FormatStrFormatter</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">%.1f</span><span class="s2">&quot;</span><span class="p">))</span>
<span class="k">for</span> <span class="n">axis</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;top&quot;</span><span class="p">,</span> <span class="s2">&quot;bottom&quot;</span><span class="p">,</span> <span class="s2">&quot;left&quot;</span><span class="p">,</span> <span class="s2">&quot;right&quot;</span><span class="p">]:</span>
<span class="n">ax</span><span class="o">.</span><span class="n">spines</span><span class="p">[</span><span class="n">axis</span><span class="p">]</span><span class="o">.</span><span class="n">set_linewidth</span><span class="p">(</span><span class="mf">1.0</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;minor&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">legend</span><span class="p">(</span><span class="n">loc</span><span class="o">=</span><span class="s2">&quot;upper right&quot;</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">)</span>
<span class="c1"># Same as above but normalise everything by the observations:</span>
<span class="n">normalisation</span> <span class="o">=</span> <span class="n">phi_obs</span>
<span class="c1"># Observed power spectrum</span>
<span class="n">axb</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">phi_obs</span> <span class="o">/</span> <span class="n">normalisation</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;black&quot;</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;$\boldsymbol{\Phi}_\mathrm</span><span class="si">{O}</span><span class="s2">$&quot;</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">N</span> <span class="o">-</span> <span class="mi">1</span><span class="p">):</span>
<span class="n">axb</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">Phi_0</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">/</span> <span class="n">normalisation</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;C7&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="n">alpha_mocks</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.7</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">axb</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">Phi_0</span><span class="p">[</span><span class="n">N</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">/</span> <span class="n">normalisation</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;C7&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="n">alpha_mocks</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.7</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;$\boldsymbol{\Phi}_{\theta_0}$&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">axb</span><span class="o">.</span><span class="n">semilogx</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">f_0</span> <span class="o">/</span> <span class="n">normalisation</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="n">COLOUR_LIST_means</span><span class="p">[</span><span class="n">idx</span><span class="p">],</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;$\textbf</span><span class="si">{f}</span><span class="s2">_0$&quot;</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># 2-sigma intervals</span>
<span class="n">axb</span><span class="o">.</span><span class="n">fill_between</span><span class="p">(</span>
<span class="n">Pbins</span><span class="p">,</span>
<span class="n">f_0</span> <span class="o">/</span> <span class="n">normalisation</span> <span class="o">-</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">C_0</span><span class="p">))</span> <span class="o">/</span> <span class="n">normalisation</span><span class="p">,</span>
<span class="n">f_0</span> <span class="o">/</span> <span class="n">normalisation</span> <span class="o">+</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">C_0</span><span class="p">))</span> <span class="o">/</span> <span class="n">normalisation</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="n">COLOUR_LIST</span><span class="p">[</span><span class="n">idx</span><span class="p">],</span>
<span class="n">alpha</span><span class="o">=</span><span class="mf">0.4</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="sa">r</span><span class="s2">&quot;2 $\sqrt{\mathrm</span><span class="si">{diag}</span><span class="s2">(\textbf</span><span class="si">{C}</span><span class="s2">_0)}$&quot;</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># Plot the binning</span>
<span class="p">(</span><span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span><span class="p">)</span> <span class="o">=</span> <span class="n">axb</span><span class="o">.</span><span class="n">get_ylim</span><span class="p">()</span>
<span class="n">axb</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">([</span><span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span><span class="p">])</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">Pbins</span><span class="p">)):</span>
<span class="n">axb</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="p">(</span><span class="n">Pbins</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">Pbins</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span>
<span class="p">(</span><span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span><span class="p">),</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.8</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;red&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="n">alpha_binning</span><span class="p">,</span>
<span class="n">zorder</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">axb</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">([</span><span class="n">Pbins</span><span class="o">.</span><span class="n">min</span><span class="p">()</span> <span class="o">-</span> <span class="mf">0.0001</span><span class="p">,</span> <span class="n">Pbins</span><span class="o">.</span><span class="n">max</span><span class="p">()</span> <span class="o">+</span> <span class="mf">0.01</span><span class="p">])</span>
<span class="n">axb</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;$k$ [$h$/Mpc]&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">)</span>
<span class="n">axb</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">&quot;x&quot;</span><span class="p">,</span> <span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS_SMALL</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="mi">8</span><span class="p">)</span>
<span class="n">axb</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_ticks_position</span><span class="p">(</span><span class="s2">&quot;both&quot;</span><span class="p">)</span>
<span class="n">axb</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span>
<span class="n">axb</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">&quot;y&quot;</span><span class="p">,</span> <span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS_TINY</span><span class="p">)</span>
<span class="n">axb</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">tick_right</span><span class="p">()</span>
<span class="k">for</span> <span class="n">axis</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;top&quot;</span><span class="p">,</span> <span class="s2">&quot;bottom&quot;</span><span class="p">,</span> <span class="s2">&quot;left&quot;</span><span class="p">,</span> <span class="s2">&quot;right&quot;</span><span class="p">]:</span>
<span class="n">axb</span><span class="o">.</span><span class="n">spines</span><span class="p">[</span><span class="n">axis</span><span class="p">]</span><span class="o">.</span><span class="n">set_linewidth</span><span class="p">(</span><span class="mf">1.0</span><span class="p">)</span>
<span class="n">axb</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">)</span>
<span class="n">axb</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;minor&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
<span class="n">axx1x</span> <span class="o">=</span> <span class="p">[</span><span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs0</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="p">]),</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs0</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">]),</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs0</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">])]</span>
<span class="c1"># Diagonal blocks of the covariance matrix (intra-population covariance)</span>
<span class="n">idx</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">ax1</span> <span class="ow">in</span> <span class="n">axx1x</span><span class="p">:</span>
<span class="n">Phi_0</span> <span class="o">=</span> <span class="n">Phi_0_full</span><span class="p">[:,</span> <span class="n">idx</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">]</span>
<span class="n">phi_obs</span> <span class="o">=</span> <span class="n">phi_obs_full</span><span class="p">[</span><span class="n">idx</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">]</span>
<span class="n">f_0</span> <span class="o">=</span> <span class="n">f_0_full</span><span class="p">[</span><span class="n">idx</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">]</span>
<span class="n">C_0</span> <span class="o">=</span> <span class="n">C_0_full</span><span class="p">[</span><span class="n">idx</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">,</span> <span class="n">idx</span> <span class="o">*</span> <span class="n">P</span> <span class="p">:</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">P</span><span class="p">]</span>
<span class="n">idx</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">C0min</span> <span class="o">=</span> <span class="n">C_0</span><span class="o">.</span><span class="n">min</span><span class="p">()</span>
<span class="n">C0max</span> <span class="o">=</span> <span class="n">C_0</span><span class="o">.</span><span class="n">max</span><span class="p">()</span>
<span class="k">if</span> <span class="n">C0min</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">C0max</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">centerval</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">centerval</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">C_0</span><span class="p">)</span>
<span class="n">divnorm</span> <span class="o">=</span> <span class="n">colors</span><span class="o">.</span><span class="n">TwoSlopeNorm</span><span class="p">(</span><span class="n">vmin</span><span class="o">=</span><span class="n">C_0</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">vcenter</span><span class="o">=</span><span class="n">centerval</span><span class="p">,</span> <span class="n">vmax</span><span class="o">=</span><span class="n">C_0</span><span class="o">.</span><span class="n">max</span><span class="p">())</span>
<span class="c1"># Plot the current block of the covariance matrix</span>
<span class="n">im1</span> <span class="o">=</span> <span class="n">ax1</span><span class="o">.</span><span class="n">pcolormesh</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">Y</span><span class="p">,</span> <span class="n">C_0</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="n">shading</span><span class="o">=</span><span class="s2">&quot;flat&quot;</span><span class="p">,</span> <span class="n">norm</span><span class="o">=</span><span class="n">divnorm</span><span class="p">,</span> <span class="n">cmap</span><span class="o">=</span><span class="n">CMap</span><span class="p">)</span>
<span class="c1"># Plot the binning</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">Pbins</span><span class="p">)):</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="p">(</span><span class="n">Pbins</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">Pbins</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span>
<span class="p">(</span><span class="n">Pbins</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">Pbins</span><span class="o">.</span><span class="n">max</span><span class="p">()),</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;red&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">Pbins</span><span class="p">)):</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="p">(</span><span class="n">Pbins</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">Pbins</span><span class="o">.</span><span class="n">max</span><span class="p">()),</span>
<span class="p">(</span><span class="n">Pbins</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">Pbins</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;red&quot;</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">idx</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;diagonal blocks of $\textbf</span><span class="si">{C}</span><span class="s2">_0$&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="mf">1.05</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;$k$ [$h$/Mpc]&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;$k$ [$h$/Mpc]&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">GLOBAL_FS_SMALL</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">set_aspect</span><span class="p">(</span><span class="s2">&quot;equal&quot;</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">set_xscale</span><span class="p">(</span><span class="s2">&quot;log&quot;</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">set_yscale</span><span class="p">(</span><span class="s2">&quot;log&quot;</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_ticks_position</span><span class="p">(</span><span class="s2">&quot;both&quot;</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_ticks_position</span><span class="p">(</span><span class="s2">&quot;both&quot;</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">xaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;minor&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;both&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">6</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">which</span><span class="o">=</span><span class="s2">&quot;minor&quot;</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">&quot;x&quot;</span><span class="p">,</span> <span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS_SMALL</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="mi">8</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">&quot;y&quot;</span><span class="p">,</span> <span class="n">which</span><span class="o">=</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS_TINY</span><span class="p">)</span>
<span class="n">cbar1</span> <span class="o">=</span> <span class="n">fig</span><span class="o">.</span><span class="n">colorbar</span><span class="p">(</span><span class="n">im1</span><span class="p">,</span> <span class="n">shrink</span><span class="o">=</span><span class="mf">0.9</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="mf">0.02</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="s2">&quot;</span><span class="si">%.1e</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">cbar1</span><span class="o">.</span><span class="n">ax</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">&quot;y&quot;</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
<span class="n">cbar1</span><span class="o">.</span><span class="n">ax</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_tick_params</span><span class="p">(</span><span class="n">labelsize</span><span class="o">=</span><span class="n">GLOBAL_FS_SMALL</span><span class="p">)</span>
<span class="n">cbar1</span><span class="o">.</span><span class="n">update_normal</span><span class="p">(</span><span class="n">im1</span><span class="p">)</span>
<span class="n">vmin</span> <span class="o">=</span> <span class="n">C_0</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">min</span><span class="p">()</span>
<span class="n">vmax</span> <span class="o">=</span> <span class="n">C_0</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">max</span><span class="p">()</span>
<span class="n">cbar1</span><span class="o">.</span><span class="n">mappable</span><span class="o">.</span><span class="n">set_clim</span><span class="p">(</span><span class="n">vmin</span><span class="o">=</span><span class="n">vmin</span><span class="p">,</span> <span class="n">vmax</span><span class="o">=</span><span class="n">vmax</span><span class="p">)</span>
<span class="k">if</span> <span class="n">vmin</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">vmax</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">ticks</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">(</span>
<span class="p">[</span>
<span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="n">vmin</span> <span class="o">*</span> <span class="mf">0.8</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
<span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mf">0.8</span> <span class="o">*</span> <span class="n">vmax</span><span class="p">,</span> <span class="mi">2</span><span class="p">)[</span><span class="mi">1</span><span class="p">:],</span>
<span class="p">]</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">ticks</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="n">vmin</span><span class="p">,</span> <span class="n">vmax</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
<span class="n">cbar1</span><span class="o">.</span><span class="n">set_ticks</span><span class="p">(</span><span class="n">ticks</span><span class="p">)</span>
<span class="n">formatter</span> <span class="o">=</span> <span class="n">ScalarFormatter</span><span class="p">(</span><span class="n">useMathText</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">formatter</span><span class="o">.</span><span class="n">set_powerlimits</span><span class="p">((</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
<span class="n">cbar1</span><span class="o">.</span><span class="n">ax</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_major_formatter</span><span class="p">(</span><span class="n">formatter</span><span class="p">)</span>
<span class="n">cbar1</span><span class="o">.</span><span class="n">ax</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_major_formatter</span><span class="p">(</span><span class="n">FormatStrFormatter</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">%.1f</span><span class="s2">&quot;</span><span class="p">))</span>
<span class="n">cbar1</span><span class="o">.</span><span class="n">ax</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">get_offset_text</span><span class="p">()</span><span class="o">.</span><span class="n">set_fontsize</span><span class="p">(</span><span class="n">GLOBAL_FS_TINY</span><span class="p">)</span>
<span class="n">cbar1</span><span class="o">.</span><span class="n">update_ticks</span><span class="p">()</span>
<span class="k">if</span> <span class="n">savepath</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">savepath</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">savepath</span><span class="p">)</span>
<span class="n">fig</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">savepath</span><span class="p">,</span> <span class="n">bbox_inches</span><span class="o">=</span><span class="s2">&quot;tight&quot;</span><span class="p">,</span> <span class="n">transparent</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="s2">&quot;png&quot;</span><span class="p">)</span>
<span class="n">fig</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">savepath</span><span class="o">.</span><span class="n">with_suffix</span><span class="p">(</span><span class="s2">&quot;.pdf&quot;</span><span class="p">),</span> <span class="n">bbox_inches</span><span class="o">=</span><span class="s2">&quot;tight&quot;</span><span class="p">,</span> <span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="s2">&quot;pdf&quot;</span><span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Plot saved to </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">savepath</span><span class="p">)</span>
<span class="k">if</span> <span class="n">force_plot</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">savepath</span><span class="p">:</span>
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">critical</span><span class="p">(</span><span class="s2">&quot;Unexpected error during plotting: </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;Plotting failed.&quot;</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">e</span></div>
<div class="viewcode-block" id="plot_histogram">
<a class="viewcode-back" href="../../../selfisys.utils.html#selfisys.utils.plot_utils.plot_histogram">[docs]</a>
<span class="k">def</span> <span class="nf">plot_histogram</span><span class="p">(</span>
<span class="n">data</span><span class="p">,</span>
<span class="n">recmahal</span><span class="p">,</span>
<span class="n">suptitle</span><span class="p">,</span>
<span class="n">savepath</span><span class="p">,</span>
<span class="n">bins</span><span class="o">=</span><span class="mi">30</span><span class="p">,</span>
<span class="n">alpha</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;blue&quot;</span><span class="p">,</span>
<span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Plot a Mahalanobis distance histogram with key reference lines.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> data : array-like</span>
<span class="sd"> Collection of Mahalanobis distances.</span>
<span class="sd"> recmahal : float</span>
<span class="sd"> Single Mahalanobis distance for the reconstruction</span>
<span class="sd"> (e.g. posterior vs. prior mean).</span>
<span class="sd"> suptitle : str</span>
<span class="sd"> Figure title.</span>
<span class="sd"> savepath : str</span>
<span class="sd"> Full path (including filename) to save the resulting plot.</span>
<span class="sd"> bins : int, optional</span>
<span class="sd"> Number of bins for the histogram. Default is 30.</span>
<span class="sd"> alpha : float, optional</span>
<span class="sd"> Transparency level for the histogram bars. Default is 0.5.</span>
<span class="sd"> color : str, optional</span>
<span class="sd"> Colour of the histogram bars. Default is &quot;blue&quot;.</span>
<span class="sd"> Raises</span>
<span class="sd"> ------</span>
<span class="sd"> OSError</span>
<span class="sd"> If the file cannot be saved to the specified path.</span>
<span class="sd"> RuntimeError</span>
<span class="sd"> For unexpected plotting failures.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Starting plot_histogram with data of size </span><span class="si">%d</span><span class="s2">.&quot;</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>
<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">5</span><span class="p">))</span>
<span class="n">plt</span><span class="o">.</span><span class="n">hist</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">bins</span><span class="o">=</span><span class="n">bins</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="n">alpha</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="n">color</span><span class="p">)</span>
<span class="n">labrec</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">&quot;$d_\mathrm</span><span class="si">{M}</span><span class="s2">(\boldsymbol{\gamma}_{\textrm</span><span class="si">{rec}</span><span class="s2">}, \boldsymbol{\theta}_0 \mid \textbf</span><span class="si">{S}</span><span class="s2">)$&quot;</span>
<span class="n">plt</span><span class="o">.</span><span class="n">axvline</span><span class="p">(</span><span class="n">recmahal</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s2">&quot;black&quot;</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;-&quot;</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="n">labrec</span><span class="p">)</span>
<span class="n">labx</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">&quot;$d_\mathrm</span><span class="si">{M}</span><span class="s2">(\boldsymbol{\gamma}, \boldsymbol{\theta}_0 \mid \textbf</span><span class="si">{S}</span><span class="s2">)$&quot;</span>
<span class="n">labmean</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">&quot;$\langle d_\mathrm</span><span class="si">{M}</span><span class="s2">(\boldsymbol{\gamma}, \boldsymbol{\theta}_0 \mid \textbf</span><span class="si">{S}</span><span class="s2">) \rangle$&quot;</span>
<span class="n">plt</span><span class="o">.</span><span class="n">axvline</span><span class="p">(</span>
<span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">data</span><span class="p">),</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;tab:pink&quot;</span><span class="p">,</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;-&quot;</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="n">labmean</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">std</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">std</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="n">labstd</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">&quot;$\pm 1 \sigma$&quot;</span>
<span class="n">plt</span><span class="o">.</span><span class="n">axvline</span><span class="p">(</span>
<span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">+</span> <span class="n">std</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;pink&quot;</span><span class="p">,</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="n">labstd</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">axvline</span><span class="p">(</span>
<span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">-</span> <span class="n">std</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="s2">&quot;pink&quot;</span><span class="p">,</span>
<span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;--&quot;</span><span class="p">,</span>
<span class="n">linewidth</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="n">labx</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="n">GLOBAL_FS_LARGE</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s2">&quot;Density&quot;</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="n">GLOBAL_FS_LARGE</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xticks</span><span class="p">(</span><span class="n">fontsize</span><span class="o">=</span><span class="n">GLOBAL_FS</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">yticks</span><span class="p">([])</span>
<span class="n">plt</span><span class="o">.</span><span class="n">suptitle</span><span class="p">(</span><span class="n">suptitle</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="n">GLOBAL_FS_XLARGE</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">(</span><span class="n">fontsize</span><span class="o">=</span><span class="n">GLOBAL_FS_LARGE</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">savepath</span><span class="p">,</span> <span class="n">bbox_inches</span><span class="o">=</span><span class="s2">&quot;tight&quot;</span><span class="p">,</span> <span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span> <span class="n">transparent</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">savepath</span><span class="p">[:</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">+</span> <span class="s2">&quot;.pdf&quot;</span><span class="p">,</span> <span class="n">bbox_inches</span><span class="o">=</span><span class="s2">&quot;tight&quot;</span><span class="p">,</span> <span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Histogram plot saved to </span><span class="si">%s</span><span class="s2"> and </span><span class="si">%s</span><span class="s2">.pdf&quot;</span><span class="p">,</span> <span class="n">savepath</span><span class="p">,</span> <span class="n">savepath</span><span class="p">[:</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span>
<span class="n">plt</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">&quot;File saving failed at path &#39;</span><span class="si">%s</span><span class="s2">&#39;: </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">savepath</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
<span class="k">raise</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">critical</span><span class="p">(</span><span class="s2">&quot;Unexpected error during histogram plotting: </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;plot_histogram failed.&quot;</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">e</span>
<span class="k">finally</span><span class="p">:</span>
<span class="n">gc</span><span class="o">.</span><span class="n">collect</span><span class="p">()</span>
<span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;plot_histogram: memory cleanup done.&quot;</span><span class="p">)</span></div>
</pre></div>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2025, Tristan Hoellinger.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>