From 8728be9b3afcddf99397fc960a4a56ad2f69c1e9 Mon Sep 17 00:00:00 2001 From: Deaglan Bartlett Date: Wed, 24 Apr 2024 09:29:28 +0200 Subject: [PATCH] Add some likelihood tests --- borg_velocity/likelihood.py | 6 +- conf/basic_ini.ini | 5 +- figs/alpha_test.png | Bin 0 -> 17988 bytes figs/muA_test.png | Bin 0 -> 8829 bytes figs/omegam_test.png | Bin 0 -> 18820 bytes figs/scaling_test.png | Bin 0 -> 20738 bytes figs/sigma8_test.png | Bin 0 -> 21208 bytes tests/allocation_stats_0.txt | 16 +++- tests/fft_wisdom | 8 +- tests/test_likelihood.py | 157 +++++++++++++++++++++++++++++++++++ tests/timing_stats_0.txt | 46 +++++++++- 11 files changed, 229 insertions(+), 9 deletions(-) create mode 100644 figs/alpha_test.png create mode 100644 figs/muA_test.png create mode 100644 figs/omegam_test.png create mode 100644 figs/scaling_test.png create mode 100644 figs/sigma8_test.png create mode 100644 tests/test_likelihood.py diff --git a/borg_velocity/likelihood.py b/borg_velocity/likelihood.py index 0f17a32..9bbbac7 100644 --- a/borg_velocity/likelihood.py +++ b/borg_velocity/likelihood.py @@ -50,6 +50,9 @@ class VelocityBORGLikelihood(borg.likelihood.BaseLikelihood): # What type of run we're doing self.run_type = config['run']['run_type'] + # Seed if creating mocks + self.mock_seed = int(config['mock']['seed']) + # Model parameters self.ai = float(config['model']['ai']) self.af = float(config['model']['af']) @@ -198,7 +201,7 @@ class VelocityBORGLikelihood(borg.likelihood.BaseLikelihood): self.MB_pos[i] = jnp.transpose(self.MB_pos[i], (2, 1, 0)) - def generateMockData(self, s_hat: np.ndarray, state: borg.likelihood.MarkovState, make_plot: bool=True) -> None: + def generateMockData(self, s_hat: np.ndarray, state: borg.likelihood.MarkovState,) -> None: """ Generates mock data by simulating the forward model with the given white noise, drawing distance tracers from the density field, computing their distance @@ -215,6 +218,7 @@ class VelocityBORGLikelihood(borg.likelihood.BaseLikelihood): elif self.run_type == 'velmass': raise NotImplementedError elif self.run_type == 'mock': + np.random.seed(self.mock_seed) self.coord_true, self.coord_meas, self.sig_mu, self.vr_true, self.cz_obs = \ mock_maker.borg_mock(s_hat, state, self.fwd, self.ini_file) else: diff --git a/conf/basic_ini.ini b/conf/basic_ini.ini index 91db0e4..9fd9fce 100644 --- a/conf/basic_ini.ini +++ b/conf/basic_ini.ini @@ -74,19 +74,20 @@ NCAT = 0 NSAMP = 2 [mock] +seed = 5 R_max = 100 [python] likelihood_path = /home/bartlett/fsigma8/borg_velocity/borg_velocity/likelihood.py [sample_0] -Nt = 345 +Nt = 160 muA = 1.0 alpha = 1.4 frac_sig_rhMpc = 0.07 [sample_1] -Nt = 1682 +Nt = 230 muA = 1.0 alpha = 1.4 frac_sig_rhMpc = 0.07 \ No newline at end of file diff --git a/figs/alpha_test.png b/figs/alpha_test.png new file mode 100644 index 0000000000000000000000000000000000000000..0142792ea8aa2453369ca254a7ff556bf6434f57 GIT binary patch literal 17988 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 literal 0 HcmV?d00001 diff --git a/figs/muA_test.png b/figs/muA_test.png new file mode 100644 index 0000000000000000000000000000000000000000..6af4ebb1a051eba697734e16f5e83fb57abe928c GIT binary patch literal 8829 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 literal 0 HcmV?d00001 diff --git a/figs/omegam_test.png b/figs/omegam_test.png new file mode 100644 index 0000000000000000000000000000000000000000..31a1c6ba4d1bea09edb0c90bb3e8fb15392de2cd GIT binary patch literal 18820 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 Nbrmh;5=GOX{{;iLm!<#! literal 0 HcmV?d00001 diff --git a/figs/scaling_test.png b/figs/scaling_test.png new file mode 100644 index 0000000000000000000000000000000000000000..dbf5ad7edc9c02491daad788e650b723effe1f1e GIT binary patch literal 20738 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

ijUE_D}r~s$|EBCmx1OH$7 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

JrT-pA-B!w)b~F2~|~FzqYaV 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 literal 0 HcmV?d00001 diff --git a/figs/sigma8_test.png b/figs/sigma8_test.png new file mode 100644 index 0000000000000000000000000000000000000000..95b70fa2a6999ecdc470800f944873b00a68a56b GIT binary patch literal 21208 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 240.656 80.2188 15.2402 +[/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/forward_model.cpp]void LibLSS::BORGForwardModel::setupDefault() 0.53125 0 0.688934 +[/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/forwards/borg_lpt.cpp]std::shared_ptr build_borg_lpt(std::shared_ptr, const LibLSS::BoxModel&, const LibLSS::PropertyProxy&) [with Grid = LibLSS::ClassicCloudInCell; LibLSS::BoxModel = LibLSS::NBoxModel<3>] 0 0 0.157661 +[/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/forwards/particle_balancer/balanceinfo.hpp]void LibLSS::BalanceInfo::allocate(LibLSS::MPI_Communication*, size_t) 76.2534 76.0009 14.9902 +[/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/forwards/primordial_as.cpp]std::shared_ptr build_primordial_as(std::shared_ptr, const LibLSS::BoxModel&, const LibLSS::PropertyProxy&) 0.078804 7.62939e-06 0.0788498 +[/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/forwards/transfer_class.cpp]std::shared_ptr build_class(std::shared_ptr, const LibLSS::BoxModel&, const LibLSS::PropertyProxy&) 0.078804 7.62939e-06 0.157669 +[/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/model_io/base.hpp]void LibLSS::detail_model::ModelIO::transfer(LibLSS::detail_model::ModelIO&&) [with long unsigned int Nd = 3] 0 235.156 0 +[/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/samplers/core/gridLikelihoodBase.cpp]LibLSS::GridDensityLikelihoodBase::GridDensityLikelihoodBase(LibLSS::MPI_Communication*, const GridSizes&, const GridLengths&) [with int Dims = 3; GridSizes = std::array; GridLengths = std::array] 0.53125 0.515625 2.76713 +[/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/python/pyforward.cpp]void do_get_density_final(LibLSS::BORGForwardModel*, pybind11::array) 80.2188 75.5 14.9902 +lpt_ic 80.2188 80.2188 15.2558 diff --git a/tests/fft_wisdom b/tests/fft_wisdom index 805d57f..dac75ab 100644 --- a/tests/fft_wisdom +++ b/tests/fft_wisdom @@ -1,18 +1,18 @@ (fftw-3.3.10 fftw_wisdom #x3c273403 #x192df114 #x4d08727c #xe98e9b9d + (fftw_dft_thr_vrank_geq1_register 0 #x10bdd #x10bdd #x0 #x21347a5d #x286e0d10 #xabf9ff02 #xccdf80a5) (fftw_dft_thr_vrank_geq1_register 0 #x10bdd #x10bdd #x0 #xe7f77f6a #xaf2de8b8 #xad19bc70 #x80305f29) (fftw_codelet_n1bv_32_avx 0 #x10bdd #x10bdd #x0 #x6d197f20 #xfc9cbd23 #x91ddb367 #x208619cb) (fftw_dft_thr_vrank_geq1_register 0 #x10bdd #x10bdd #x0 #x1f2e97fe #x61895cd8 #x6073a2f5 #x6ada2663) (fftw_dft_thr_vrank_geq1_register 0 #x10bdd #x10bdd #x0 #x84033142 #x81339a41 #xb78a491e #x66362e05) + (fftw_dft_thr_vrank_geq1_register 0 #x10bdd #x10bdd #x0 #x0ac209ed #x737616a2 #xc31f0ad8 #x13c3716f) (fftw_rdft2_thr_vrank_geq1_register 0 #x10bdd #x10bdd #x0 #x40ffeb6f #x4d232a35 #x49c61e65 #x4d75fa83) (fftw_codelet_n1bv_32_avx 0 #x10bdd #x10bdd #x0 #x35d0d312 #x6b498ae1 #x1ddcffdc #x4a1a1998) (fftw_dft_thr_vrank_geq1_register 0 #x10bdd #x10bdd #x0 #xbffceb36 #x5b340e87 #xc2433c88 #x10e155b2) - (fftw_rdft2_thr_vrank_geq1_register 0 #x10bdd #x10bdd #x0 #x7ec9785e #x02957b55 #xab1017dc #xdcd04ed7) (fftw_codelet_r2cf_32 2 #x10bdd #x10bdd #x0 #xe5219ff5 #x7cc0cc2f #x9ce07377 #x12d27b02) (fftw_dft_thr_vrank_geq1_register 0 #x10bdd #x10bdd #x0 #xd78cc60c #x6e1210c6 #x5868829d #x70ada990) (fftw_codelet_r2cf_32 2 #x10bdd #x10bdd #x0 #x68269cfc #xb89b69b3 #x4eaad8fa #x9807c679) (fftw_rdft2_rank_geq2_register 0 #x10bdd #x10bdd #x0 #x7446ec55 #x3f800a5f #xba25afcf #xc0e9d5c1) - (fftw_dft_thr_vrank_geq1_register 0 #x10bdd #x10bdd #x0 #x0ac209ed #x737616a2 #xc31f0ad8 #x13c3716f) - (fftw_dft_vrank_geq1_register 0 #x10bdd #x10bdd #x0 #x4b54e3ca #x4f94ebf3 #x244f4da3 #x2412ca79) + (fftw_rdft2_thr_vrank_geq1_register 0 #x10bdd #x10bdd #x0 #x7ec9785e #x02957b55 #xab1017dc #xdcd04ed7) (fftw_rdft2_rank_geq2_register 0 #x10bdd #x10bdd #x0 #x68900aea #xb640ce9e #xcd3b0e06 #x8170fa63) (fftw_dft_vrank_geq1_register 0 #x10bdd #x10bdd #x0 #x404fdd72 #x2323d034 #xc860c577 #x4779492a) (fftw_rdft2_rank_geq2_register 0 #x10bdd #x10bdd #x0 #x3c2e2a1a #x07c08954 #x35c337d9 #x80864862) @@ -24,5 +24,5 @@ (fftw_dft_thr_vrank_geq1_register 0 #x10bdd #x10bdd #x0 #xe0a3b250 #xab7e7c07 #xf0935dde #x1568a95f) (fftw_codelet_r2cb_32 2 #x10bdd #x10bdd #x0 #x4e6e3714 #xebce55aa #x0ede5253 #x4faf4524) (fftw_codelet_n1bv_32_sse2 0 #x10bdd #x10bdd #x0 #x902cd310 #xa659999d #x6fde2637 #xb23e4fd2) - (fftw_dft_thr_vrank_geq1_register 0 #x10bdd #x10bdd #x0 #x21347a5d #x286e0d10 #xabf9ff02 #xccdf80a5) + (fftw_dft_vrank_geq1_register 0 #x10bdd #x10bdd #x0 #x4b54e3ca #x4f94ebf3 #x244f4da3 #x2412ca79) ) diff --git a/tests/test_likelihood.py b/tests/test_likelihood.py new file mode 100644 index 0000000..d21b140 --- /dev/null +++ b/tests/test_likelihood.py @@ -0,0 +1,157 @@ +import aquila_borg as borg +import configparser +import numpy as np +import matplotlib.pyplot as plt + +import borg_velocity.likelihood as likelihood +import borg_velocity.forwards as forwards +import borg_velocity.utils as utils + +ini_file = '../conf/basic_ini.ini' +test_scaling = False +test_sigma8 = False +test_omegam = False +test_alpha = False +test_muA = True + +# Input box +box_in = borg.forward.BoxModel() +config = configparser.ConfigParser() +config.read(ini_file) +box_in.L = (float(config['system']['L0']), float(config['system']['L1']), float(config['system']['L2'])) +box_in.N = (int(config['system']['N0']), int(config['system']['N1']), int(config['system']['N2'])) +box_in.xmin = (float(config['system']['corner0']), float(config['system']['corner1']), float(config['system']['corner2'])) + +# Setup BORG forward model and likelihood +model = likelihood.build_gravity_model(None, box_in, ini_file=ini_file) +cosmo = utils.get_cosmopar(ini_file) +model.setCosmoParams(cosmo) +fwd_param = forwards.NullForward(box_in) +mylike = likelihood.VelocityBORGLikelihood(model, fwd_param, ini_file) + +# Create mock data +state = borg.likelihood.MarkovState() +mylike.initializeLikelihood(state) +mylike.updateCosmology(cosmo) +s_hat = np.fft.rfftn(np.random.randn(*box_in.N)) / box_in.Ntot ** (0.5) +mylike.generateMockData(s_hat, state) + +if test_scaling: + all_scale = np.linspace(0.5, 1.5, 100) + all_lkl = np.empty(all_scale.shape) + for i, scale in enumerate(all_scale): + all_lkl[i] = mylike.logLikelihoodComplex(scale * s_hat, None) + fid_lkl = mylike.logLikelihoodComplex(s_hat, None) + all_lkl -= fid_lkl + all_lkl = np.exp(-all_lkl) + + fig, ax = plt.subplots(1, 1, figsize=(5,5)) + ax.plot(all_scale, all_lkl) + ax.axhline(y=0, color='k') + ax.axvline(x=1, color='k') + ax.set_xlabel(r'$\hat{s}$ scaling') + ax.set_ylabel(r'$\mathcal{L}$') + fig.tight_layout() + fig.savefig('../figs/scaling_test.png') + fig.clf() + plt.close(fig) + +# Test sigma8 +if test_sigma8: + all_sigma8 = np.linspace(0.5, 1.2, 40) + all_lkl = np.empty(all_sigma8.shape) + cosmo_true = mylike.fwd.getCosmoParams() + cosmo = mylike.fwd.getCosmoParams() + for i, sigma8 in enumerate(all_sigma8): + cosmo.sigma8 = sigma8 + mylike.updateCosmology(cosmo) + all_lkl[i] = mylike.logLikelihoodComplex(s_hat, None) + mylike.updateCosmology(cosmo_true) + fid_lkl = mylike.logLikelihoodComplex(s_hat, None) + all_lkl -= fid_lkl + all_lkl = np.exp(-all_lkl) + + fig, ax = plt.subplots(1, 1, figsize=(5,5)) + ax.plot(all_sigma8, all_lkl) + ax.axhline(y=0, color='k') + ax.axvline(x=cosmo_true.sigma8, color='k') + ax.set_xlabel(r'$\sigma_8$') + ax.set_ylabel(r'$\mathcal{L}$') + fig.tight_layout() + fig.savefig('../figs/sigma8_test.png') + fig.clf() + plt.close(fig) + + +# Test sigma8 +if test_omegam: + all_omegam = np.linspace(0.1, 0.6, 40) + all_lkl = np.empty(all_omegam.shape) + cosmo_true = mylike.fwd.getCosmoParams() + cosmo = mylike.fwd.getCosmoParams() + for i, omegam in enumerate(all_omegam): + cosmo.omega_m = omegam + mylike.updateCosmology(cosmo) + all_lkl[i] = mylike.logLikelihoodComplex(s_hat, None) + mylike.updateCosmology(cosmo_true) + fid_lkl = mylike.logLikelihoodComplex(s_hat, None) + all_lkl -= fid_lkl + all_lkl = np.exp(-all_lkl) + + fig, ax = plt.subplots(1, 1, figsize=(5,5)) + ax.plot(all_omegam, all_lkl) + ax.axhline(y=0, color='k') + ax.axvline(x=cosmo_true.omega_m, color='k') + ax.set_xlabel(r'$\Omega_{\rm m}$') + ax.set_ylabel(r'$\mathcal{L}$') + fig.tight_layout() + fig.savefig('../figs/omegam_test.png') + fig.clf() + plt.close(fig) + +# Test bias model +if test_alpha: + all_alpha = np.linspace(-1.0, 5.0, 50) + all_lkl = np.empty(all_alpha.shape) + for i, alpha in enumerate(all_alpha): + mylike.fwd_param.setModelParams({'alpha0':alpha}) + all_lkl[i] = mylike.logLikelihoodComplex(s_hat, None) + mylike.fwd_param.setModelParams({'alpha0':mylike.alpha[0]}) + fid_lkl = mylike.logLikelihoodComplex(s_hat, None) + all_lkl -= fid_lkl + all_lkl = np.exp(-all_lkl) + + fig, ax = plt.subplots(1, 1, figsize=(5,5)) + ax.plot(all_alpha, all_lkl) + ax.axhline(y=0, color='k') + ax.axvline(x=mylike.alpha[0], color='k') + ax.set_xlabel(r'$\alpha_0$') + ax.set_ylabel(r'$\mathcal{L}$') + fig.tight_layout() + fig.savefig('../figs/alpha_test.png') + fig.clf() + plt.close(fig) + + +# Test bias model +if test_muA: + all_muA = np.linspace(0.5, 1.5, 50) + all_lkl = np.empty(all_muA.shape) + for i, muA in enumerate(all_muA): + mylike.fwd_param.setModelParams({'muA0':muA}) + all_lkl[i] = mylike.logLikelihoodComplex(s_hat, None) + mylike.fwd_param.setModelParams({'muA0':mylike.muA[0]}) + fid_lkl = mylike.logLikelihoodComplex(s_hat, None) + all_lkl -= fid_lkl + all_lkl = np.exp(-all_lkl) + + fig, ax = plt.subplots(1, 1, figsize=(5,5)) + ax.plot(all_muA, all_lkl) + ax.axhline(y=0, color='k') + ax.axvline(x=mylike.muA[0], color='k') + ax.set_xlabel(r'$\mu_0$') + ax.set_ylabel(r'$\mathcal{L}$') + fig.tight_layout() + fig.savefig('../figs/muA_test.png') + fig.clf() + plt.close(fig) diff --git a/tests/timing_stats_0.txt b/tests/timing_stats_0.txt index 7cab522..897431c 100644 --- a/tests/timing_stats_0.txt +++ b/tests/timing_stats_0.txt @@ -4,4 +4,48 @@ Cumulative timing spent in different context -------------------------------------------- Context, Total time (seconds) - [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/forwards/adapt_generic_bias.cpp]void {anonymous}::bias_registrator() 1 0.000723925 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/chain_forward_model.cpp]virtual void LibLSS::ChainForwardModel::forwardModel_v2(LibLSS::detail_input::ModelInput<3>) 302 6.31245 + BORG LPT MODEL 302 5.82636 + BORG forward model 302 5.80025 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/forward_model.cpp]void LibLSS::ForwardModel::setCosmoParams(const LibLSS::CosmologicalParameters&) 29 1.56883 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/forwards/borg_lpt.cpp]void LibLSS::BorgLptModel::updateCosmo() [with CIC = LibLSS::ClassicCloudInCell] 5 0.710055 + lightcone computation 1 0.69232 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/cosmo.cpp]void LibLSS::Cosmology::precompute_d_plus() 1 0.603931 + lpt_ic 302 0.392354 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/forwards/lpt/borg_fwd_lpt.cpp]void LibLSS::BorgLptModel::getDensityFinal(LibLSS::detail_output::ModelOutput<3>) [with CIC = LibLSS::ClassicCloudInCell] 302 0.321819 + Classic CIC projection 302 0.256846 + FFTW_Manager::execute_c2r 906 0.122506 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/forwards/transfer_class.cpp]virtual void LibLSS::ForwardClass::updateCosmo() 5 0.0733008 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/class_cosmo.cpp]LibLSS::ClassCosmo::ClassCosmo(const LibLSS::CosmologicalParameters&, unsigned int, double, std::string, unsigned int, const std::map, std::__cxx11::basic_string >&) 1 0.0726085 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/cosmo.cpp]void LibLSS::Cosmology::precompute_com2a() 1 0.0703289 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/python/pyforward.cpp]void do_get_density_final(LibLSS::BORGForwardModel*, pybind11::array) 302 0.0631881 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/python/pyforward.cpp]void transfer_in(std::shared_ptr >&, T&, U&, bool) [with T = boost::multi_array_ref, 3>; U = pybind11::detail::unchecked_reference, 3>] 302 0.0370347 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/model_io.cpp]LibLSS::detail_output::ModelOutputBase::~ModelOutputBase() [with long unsigned int Nd = 3; Super = LibLSS::detail_model::ModelIO<3>] 3322 0.0272583 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/chain_forward_model.cpp]virtual void LibLSS::ChainForwardModel::getDensityFinal(LibLSS::detail_output::ModelOutput<3>) 302 0.0215866 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/model_io.cpp]void LibLSS::detail_output::ModelOutputBase::transfer(LibLSS::detail_output::ModelOutputBase&&) [with long unsigned int Nd = 3; Super = LibLSS::detail_model::ModelIO<3>] 2718 0.0201743 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/forwards/particle_balancer/balanceinfo.hpp]void LibLSS::BalanceInfo::allocate(LibLSS::MPI_Communication*, size_t) 302 0.0151142 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/model_io/base.hpp]void LibLSS::detail_model::ModelIO::transfer(LibLSS::detail_model::ModelIO&&) [with long unsigned int Nd = 3] 6946 0.00685386 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/forwards/primordial_as.cpp]virtual void LibLSS::ForwardPrimordial_As::forwardModel_v2(LibLSS::detail_input::ModelInput<3>) 302 0.00566568 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/forwards/borg_lpt.cpp]std::shared_ptr build_borg_lpt(std::shared_ptr, const LibLSS::BoxModel&, const LibLSS::PropertyProxy&) [with Grid = LibLSS::ClassicCloudInCell; LibLSS::BoxModel = LibLSS::NBoxModel<3>] 1 0.00491132 + BorgLptModel::BorgLptModel 1 0.00483932 + FFTW_Manager::create_r2c_plan 3 0.00401923 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/forwards/transfer_class.cpp]virtual void LibLSS::ForwardClass::forwardModel_v2(LibLSS::detail_input::ModelInput<3>) 302 0.00395206 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/forwards/adapt_generic_bias.cpp]void {anonymous}::bias_registrator() 1 0.00265152 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/model_io.cpp]void LibLSS::detail_output::ModelOutputBase::close() [with long unsigned int Nd = 3; Super = LibLSS::detail_model::ModelIO<3>] 3322 0.00252739 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/forward_model.cpp]void LibLSS::BORGForwardModel::setupDefault() 1 0.00234709 + FFTW_Manager::create_c2r_plan 2 0.00231646 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/forwards/transfer_class.cpp]std::shared_ptr build_class(std::shared_ptr, const LibLSS::BoxModel&, const LibLSS::PropertyProxy&) 1 0.00229587 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/forwards/primordial_as.cpp]std::shared_ptr build_primordial_as(std::shared_ptr, const LibLSS::BoxModel&, const LibLSS::PropertyProxy&) 1 0.00227005 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/samplers/core/gridLikelihoodBase.cpp]LibLSS::GridDensityLikelihoodBase::GridDensityLikelihoodBase(LibLSS::MPI_Communication*, const GridSizes&, const GridLengths&) [with int Dims = 3; GridSizes = std::array; GridLengths = std::array] 1 0.00177235 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/class_cosmo.cpp]void LibLSS::ClassCosmo::retrieve_Tk(double) 2 0.00115242 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/model_io.cpp]void LibLSS::detail_output::ModelOutputBase::setRequestedIO(LibLSS::PreferredIO) [with long unsigned int Nd = 3; Super = LibLSS::detail_model::ModelIO<3>] 1208 0.00107811 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/class_cosmo.cpp]void LibLSS::ClassCosmo::reinterpolate(const array_ref_1d&, const array_ref_1d&, LibLSS::internal_auto_interp::auto_interpolator&) 6 0.00102937 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/forwards/primordial_as.cpp]virtual void LibLSS::ForwardPrimordial_As::updateCosmo() 10 0.0010009 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/model_io.cpp]void LibLSS::detail_input::ModelInputBase::setRequestedIO(LibLSS::PreferredIO) [with long unsigned int Nd = 3; Super = LibLSS::detail_model::ModelIO<3>] 906 0.000742612 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/forwards/primordial_as.cpp]void LibLSS::ForwardPrimordial_As::updatePower() 5 0.000559304 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/model_io.cpp]void LibLSS::detail_input::ModelInputBase::needDestroyInput() [with long unsigned int Nd = 3; Super = LibLSS::detail_model::ModelIO<3>] 302 0.000316937 + particle distribution 302 0.000287307 + BORGForwardModel::setup 7 0.000122816 + Initializing peer system 12 4.3684e-05 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/forwards/transfer_class.cpp]virtual void LibLSS::ForwardClass::setModelParams(const LibLSS::ModelDictionnary&) 1 1.2359e-05 + [/build/jenkins/miniconda3/envs/builder/conda-bld/aquila_borg_1686906696789/work/libLSS/physics/forward_model.cpp]virtual void LibLSS::ForwardModel::setModelParams(const LibLSS::ModelDictionnary&) 1 2.473e-06