def testBackground(self): pars = camb.CAMBparams() pars.set_cosmology(H0=68.5, ombh2=0.022, omch2=0.122, YHe=0.2453, mnu=0.07, omk=0) zre = camb.get_zre_from_tau(pars, 0.06) age = camb.get_age(pars) self.assertAlmostEqual(zre, 8.39, 2) self.assertAlmostEqual(age, 13.65, 2) data = camb.CAMBdata() bao = data.get_BAO([0.57, 0.27], pars) data = camb.CAMBdata() data.calc_background(pars) DA = data.angular_diameter_distance(0.57) H = data.hubble_parameter(0.27) self.assertAlmostEqual(DA, bao[0][2], 3) self.assertAlmostEqual(H, bao[1][1], 3) age2 = data.physical_time(0) self.assertAlmostEqual(age, age2, 4) r = data.comoving_radial_distance(0.48) t0 = data.conformal_time(0) t1 = data.conformal_time(11.5) t2 = data.comoving_radial_distance(11.5) self.assertAlmostEqual(t2, t0 - t1, 2) self.assertAlmostEqual(t1, 4200.78, 2) chistar = data.conformal_time(0) - model.tau_maxvis.value chis = np.linspace(0, chistar, 197) zs = data.redshift_at_comoving_radial_distance(chis) chitest = data.comoving_radial_distance(zs) self.assertTrue(np.sum((chitest - chis)**2) < 1e-3) theta = data.cosmomc_theta() self.assertAlmostEqual(theta, 0.0104759965, 5) derived = data.get_derived_params() self.assertAlmostEqual(derived['age'], age, 2) self.assertAlmostEqual(derived['rdrag'], 146.976, 2) # Test BBN consistency, base_plikHM_TT_lowTEB best fit model pars.set_cosmology(H0=67.31, ombh2=0.022242, omch2=0.11977, mnu=0.06, omk=0) self.assertAlmostEqual(pars.YHe, 0.245336, 5) data.calc_background(pars) self.assertAlmostEqual(data.cosmomc_theta(), 0.01040862, 7) self.assertAlmostEqual(data.get_derived_params()['kd'], 0.14055, 4) # test massive sterile models as in Planck papers pars.set_cosmology(H0=68.0, ombh2=0.022305, omch2=0.11873, mnu=0.06, nnu=3.073, omk=0, meffsterile=0.013) self.assertAlmostEqual(pars.omegan * (pars.H0 / 100)**2, 0.00078, 5) self.assertAlmostEqual(pars.YHe, 0.24573, 5) data.calc_background(pars) self.assertAlmostEqual(data.get_derived_params()['age'], 13.773, 2) self.assertAlmostEqual(data.cosmomc_theta(), 0.0104103, 6) # test dark energy pars.set_cosmology(H0=68.26, ombh2=0.022271, omch2=0.11914, mnu=0.06, omk=0) pars.set_dark_energy(w=-1.0226, dark_energy_model='fluid') data.calc_background(pars) self.assertAlmostEqual(data.get_derived_params()['age'], 13.789, 2) scal = data.luminosity_distance(1.4) vec = data.luminosity_distance([1.2, 1.4, 0.1, 1.9]) self.assertAlmostEqual(scal, vec[1], 5) pars.set_dark_energy() # re-set defaults # test theta pars.set_cosmology(cosmomc_theta=0.0104085, H0=None, ombh2=0.022271, omch2=0.11914, mnu=0.06, omk=0) self.assertAlmostEqual(pars.H0, 67.5512, 2)
def testAssigments(self): ini = os.path.join(os.path.dirname(__file__), '..', 'inifiles', 'planck_2018.ini') if os.path.exists(ini): pars = camb.read_ini(ini) self.assertTrue(np.abs(camb.get_background(pars).cosmomc_theta() * 100 / 1.040909 - 1) < 2e-5) pars = camb.CAMBparams() pars.set_cosmology(H0=68.5, ombh2=0.022, mnu=0, omch2=0.1) self.assertAlmostEqual(pars.omegam, (0.022 + 0.1) / 0.685 ** 2) with self.assertRaises(AttributeError): # noinspection PyPropertyAccess pars.omegam = 1 pars.InitPower.set_params(ns=0.01) data = camb.CAMBdata() data.Params = pars self.assertEqual(data.Params.InitPower.ns, pars.InitPower.ns) d = dark_energy.DarkEnergyFluid(w=-0.95) pars.DarkEnergy = d self.assertEqual(pars.DarkEnergy.w, -0.95) pars.DarkEnergy = dark_energy.AxionEffectiveFluid(w_n=0.4) data.Params = pars self.assertEqual(pars.DarkEnergy.w_n, 0.4) pars.z_outputs = [0.1, 0.4] self.assertEqual(pars.z_outputs[1], 0.4) pars.z_outputs[0] = 0.3 self.assertEqual(pars.z_outputs[0], 0.3) pars.z_outputs = pars.z_outputs pars.z_outputs = [] pars.z_outputs = None self.assertFalse(len(pars.z_outputs)) with self.assertRaises(TypeError): pars.DarkEnergy = initialpower.InitialPowerLaw() pars.NonLinear = model.NonLinear_both printstr = str(pars) self.assertTrue('Want_CMB_lensing = True' in printstr and "NonLinear = NonLinear_both" in printstr) pars.NonLinear = model.NonLinear_lens self.assertTrue(pars.NonLinear == model.NonLinear_lens) with self.assertRaises(ValueError): pars.NonLinear = 4 pars.nu_mass_degeneracies = np.zeros(3) self.assertTrue(len(pars.nu_mass_degeneracies) == 3) pars.nu_mass_degeneracies = [1, 2, 3] self.assertTrue(pars.nu_mass_degeneracies[1] == 2) pars.nu_mass_degeneracies[1] = 5 self.assertTrue(pars.nu_mass_degeneracies[1] == 5) with self.assertRaises(CAMBParamRangeError): pars.nu_mass_degeneracies = np.zeros(7) pars.nu_mass_eigenstates = 0 self.assertFalse(len((pars.nu_mass_degeneracies[:1]))) pars = camb.set_params(**{'InitPower.ns': 1.2, 'WantTransfer': True}) self.assertEqual(pars.InitPower.ns, 1.2) self.assertTrue(pars.WantTransfer) pars.DarkEnergy = None from camb.sources import GaussianSourceWindow pars = camb.CAMBparams() pars.SourceWindows = [GaussianSourceWindow(), GaussianSourceWindow(redshift=1)] self.assertEqual(pars.SourceWindows[1].redshift, 1) pars.SourceWindows[0].redshift = 2 self.assertEqual(pars.SourceWindows[0].redshift, 2) self.assertTrue(len(pars.SourceWindows) == 2) pars.SourceWindows[0] = GaussianSourceWindow(redshift=3) self.assertEqual(pars.SourceWindows[0].redshift, 3) self.assertTrue('redshift = 3.0' in str(pars)) pars.SourceWindows = pars.SourceWindows[0:1] self.assertTrue(len(pars.SourceWindows) == 1) pars.SourceWindows = [] self.assertTrue(len(pars.SourceWindows) == 0)
def testBackground(self): pars = camb.CAMBparams() pars.set_cosmology(H0=68.5, ombh2=0.022, omch2=0.122, YHe=0.2453, mnu=0.07, omk=0) zre = camb.get_zre_from_tau(pars, 0.06) age = camb.get_age(pars) self.assertAlmostEqual(zre, 8.39, 2) self.assertAlmostEqual(age, 13.65, 2) data = camb.CAMBdata() bao = data.get_BAO([0.57, 0.27], pars) data = camb.CAMBdata() data.calc_background(pars) DA = data.angular_diameter_distance(0.57) H = data.hubble_parameter(0.27) self.assertAlmostEqual(DA, bao[0][2], 3) self.assertAlmostEqual(H, bao[1][1], 3) age2 = data.physical_time(0) self.assertAlmostEqual(age, age2, 4) data.comoving_radial_distance(0.48) t0 = data.conformal_time(0) self.assertAlmostEqual(t0, data.tau0) t1 = data.conformal_time(11.5) t2 = data.comoving_radial_distance(11.5) self.assertAlmostEqual(t2, t0 - t1, 2) self.assertAlmostEqual(t1, 4200.78, 2) chistar = data.conformal_time(0) - data.tau_maxvis chis = np.linspace(0, chistar, 197) zs = data.redshift_at_comoving_radial_distance(chis) chitest = data.comoving_radial_distance(zs) self.assertTrue(np.sum((chitest - chis) ** 2) < 1e-3) theta = data.cosmomc_theta() self.assertAlmostEqual(theta, 0.0104759965, 5) derived = data.get_derived_params() self.assertAlmostEqual(derived['age'], age, 2) self.assertAlmostEqual(derived['rdrag'], 146.976, 2) self.assertAlmostEqual(derived['rstar'], data.sound_horizon(derived['zstar']), 2) # Test BBN consistency, base_plikHM_TT_lowTEB best fit model pars.set_cosmology(H0=67.31, ombh2=0.022242, omch2=0.11977, mnu=0.06, omk=0) self.assertAlmostEqual(pars.YHe, 0.245347, 5) data.calc_background(pars) self.assertAlmostEqual(data.cosmomc_theta(), 0.010408566, 7) self.assertAlmostEqual(data.get_derived_params()['kd'], 0.14055, 4) pars.set_cosmology(H0=67.31, ombh2=0.022242, omch2=0.11977, mnu=0.06, omk=0, bbn_predictor=bbn.BBN_table_interpolator()) self.assertAlmostEqual(pars.YHe, 0.2453469, 5) self.assertAlmostEqual(pars.get_Y_p(), bbn.BBN_table_interpolator().Y_p(0.022242, 0), 5) # test massive sterile models as in Planck papers pars.set_cosmology(H0=68.0, ombh2=0.022305, omch2=0.11873, mnu=0.06, nnu=3.073, omk=0, meffsterile=0.013) self.assertAlmostEqual(pars.omnuh2, 0.00078, 5) self.assertAlmostEqual(pars.YHe, 0.24573, 5) self.assertAlmostEqual(pars.N_eff, 3.073, 4) data.calc_background(pars) self.assertAlmostEqual(data.get_derived_params()['age'], 13.773, 2) self.assertAlmostEqual(data.cosmomc_theta(), 0.0104103, 6) # test dark energy pars.set_cosmology(H0=68.26, ombh2=0.022271, omch2=0.11914, mnu=0.06, omk=0) pars.set_dark_energy(w=-1.0226, dark_energy_model='fluid') data.calc_background(pars) self.assertAlmostEqual(data.get_derived_params()['age'], 13.789, 2) scal = data.luminosity_distance(1.4) vec = data.luminosity_distance([1.2, 1.4, 0.1, 1.9]) self.assertAlmostEqual(scal, vec[1], 5) pars.set_dark_energy() # re-set defaults # test theta pars.set_cosmology(cosmomc_theta=0.0104085, ombh2=0.022271, omch2=0.11914, mnu=0.06, omk=0) self.assertAlmostEqual(pars.H0, 67.5512, 2) with self.assertRaises(CAMBParamRangeError): pars.set_cosmology(cosmomc_theta=0.0204085, ombh2=0.022271, omch2=0.11914, mnu=0.06, omk=0) pars = camb.set_params(cosmomc_theta=0.0104077, ombh2=0.022, omch2=0.122, w=-0.95) self.assertAlmostEqual(camb.get_background(pars, no_thermo=True).cosmomc_theta(), 0.0104077, 7) pars = camb.set_params(thetastar=0.010311, ombh2=0.022, omch2=0.122) self.assertAlmostEqual(camb.get_background(pars).get_derived_params()['thetastar'] / 100, 0.010311, 7) pars = camb.set_params(thetastar=0.010311, ombh2=0.022, omch2=0.122, omk=-0.05) self.assertAlmostEqual(camb.get_background(pars).get_derived_params()['thetastar'] / 100, 0.010311, 7) self.assertAlmostEqual(pars.H0, 49.7148, places=3) pars = camb.set_params(cosmomc_theta=0.0104077, ombh2=0.022, omch2=0.122, w=-0.95, wa=0, dark_energy_model='ppf') self.assertAlmostEqual(camb.get_background(pars, no_thermo=True).cosmomc_theta(), 0.0104077, 7) pars = camb.set_params(cosmomc_theta=0.0104077, ombh2=0.022, omch2=0.122, w=-0.95, dark_energy_model='DarkEnergyFluid', initial_power_model='InitialPowerLaw') self.assertAlmostEqual(camb.get_background(pars, no_thermo=True).cosmomc_theta(), 0.0104077, 7) with self.assertRaises(CAMBValueError): camb.set_params(dark_energy_model='InitialPowerLaw') data.calc_background(pars) h2 = (data.Params.H0 / 100) ** 2 self.assertAlmostEqual(data.get_Omega('baryon'), data.Params.ombh2 / h2, 7) self.assertAlmostEqual(data.get_Omega('nu'), data.Params.omnuh2 / h2, 7) self.assertAlmostEqual(data.get_Omega('photon') + data.get_Omega('neutrino') + data.get_Omega('de') + (pars.ombh2 + pars.omch2 + pars.omnuh2) / h2 + pars.omk, 1, 8) pars.set_cosmology(H0=67, mnu=1, neutrino_hierarchy='normal') data.calc_background(pars) h2 = (pars.H0 / 100) ** 2 self.assertAlmostEqual(data.get_Omega('photon') + data.get_Omega('neutrino') + data.get_Omega('de') + (pars.ombh2 + pars.omch2 + pars.omnuh2) / h2 + pars.omk, 1, 8) redshifts = np.array([0.005, 0.01, 0.3, 0.9342, 4, 27, 321.5, 932, 1049, 1092, 2580, 1e4, 2.1e7]) self.assertTrue( np.allclose(data.redshift_at_conformal_time(data.conformal_time(redshifts)), redshifts, rtol=1e-7)) pars.set_dark_energy(w=-1.8) data.calc_background(pars) self.assertTrue( np.allclose(data.redshift_at_conformal_time(data.conformal_time(redshifts)), redshifts, rtol=1e-7)) pars.set_cosmology(cosmomc_theta=0.0104085) data.calc_background(pars) self.assertAlmostEqual(data.cosmomc_theta(), 0.0104085) derived = data.get_derived_params() pars.Accuracy.BackgroundTimeStepBoost = 2 data.calc_background(pars) derived2 = data.get_derived_params() self.assertAlmostEqual(derived['thetastar'], derived2['thetastar'], places=5) pars.set_cosmology(H0=67.5, ombh2=0.022, omch2=0.122, mnu=0.11, neutrino_hierarchy='inverted') self.assertEqual(pars.num_nu_massive, 3) self.assertEqual(pars.nu_mass_numbers[1], 1) self.assertEqual(pars.nu_mass_eigenstates, 2) self.assertAlmostEqual(pars.nu_mass_fractions[0], 0.915197, places=4)
def testAssigments(self): ini = os.path.join(os.path.dirname(__file__), '..', 'inifiles', 'planck_2018.ini') if os.path.exists(ini): pars = camb.read_ini(ini) self.assertTrue( np.abs( camb.get_background(pars).cosmomc_theta() * 100 / 1.040909 - 1) < 2e-5) pars = camb.CAMBparams() pars.set_cosmology(H0=68.5, ombh2=0.022, mnu=0, omch2=0.1) self.assertAlmostEqual(pars.omegam, (0.022 + 0.1) / 0.685**2) with self.assertRaises(AttributeError): # noinspection PyPropertyAccess pars.omegam = 1 pars.InitPower.set_params(ns=0.01) data = camb.CAMBdata() data.Params = pars self.assertEqual(data.Params.InitPower.ns, pars.InitPower.ns) d = dark_energy.DarkEnergyFluid(w=-0.95) pars.DarkEnergy = d self.assertEqual(pars.DarkEnergy.w, -0.95) pars.DarkEnergy = dark_energy.AxionEffectiveFluid(w_n=0.4) data.Params = pars self.assertEqual(pars.DarkEnergy.w_n, 0.4) pars.z_outputs = [0.1, 0.4] self.assertEqual(pars.z_outputs[1], 0.4) pars.z_outputs[0] = 0.3 self.assertEqual(pars.z_outputs[0], 0.3) pars.z_outputs = pars.z_outputs pars.z_outputs = [] pars.z_outputs = None # noinspection PyTypeChecker self.assertFalse(len(pars.z_outputs)) with self.assertRaises(TypeError): pars.DarkEnergy = initialpower.InitialPowerLaw() pars.NonLinear = model.NonLinear_both printstr = str(pars) self.assertTrue('Want_CMB_lensing = True' in printstr and "NonLinear = NonLinear_both" in printstr) pars.NonLinear = model.NonLinear_lens self.assertTrue(pars.NonLinear == model.NonLinear_lens) with self.assertRaises(ValueError): pars.NonLinear = 4 pars.nu_mass_degeneracies = np.zeros(3) self.assertTrue(len(pars.nu_mass_degeneracies) == 3) pars.nu_mass_degeneracies = [1, 2, 3] self.assertTrue(pars.nu_mass_degeneracies[1] == 2) pars.nu_mass_degeneracies[1] = 5 self.assertTrue(pars.nu_mass_degeneracies[1] == 5) with self.assertRaises(CAMBParamRangeError): pars.nu_mass_degeneracies = np.zeros(7) pars.nu_mass_eigenstates = 0 self.assertFalse(len((pars.nu_mass_degeneracies[:1]))) pars = camb.set_params(**{'InitPower.ns': 1.2, 'WantTransfer': True}) self.assertEqual(pars.InitPower.ns, 1.2) self.assertTrue(pars.WantTransfer) pars.DarkEnergy = None pars = camb.set_params(**{ 'H0': 67, 'ombh2': 0.002, 'r': 0.1, 'Accuracy.AccurateBB': True }) self.assertEqual(pars.Accuracy.AccurateBB, True) from camb.sources import GaussianSourceWindow pars = camb.CAMBparams() pars.SourceWindows = [ GaussianSourceWindow(), GaussianSourceWindow(redshift=1) ] self.assertEqual(pars.SourceWindows[1].redshift, 1) pars.SourceWindows[0].redshift = 2 self.assertEqual(pars.SourceWindows[0].redshift, 2) self.assertTrue(len(pars.SourceWindows) == 2) pars.SourceWindows[0] = GaussianSourceWindow(redshift=3) self.assertEqual(pars.SourceWindows[0].redshift, 3) self.assertTrue('redshift = 3.0' in str(pars)) pars.SourceWindows = pars.SourceWindows[0:1] self.assertTrue(len(pars.SourceWindows) == 1) pars.SourceWindows = [] self.assertTrue(len(pars.SourceWindows) == 0) params = camb.get_valid_numerical_params() self.assertEqual( params, { 'ombh2', 'deltazrei', 'omnuh2', 'tau', 'omk', 'zrei', 'thetastar', 'nrunrun', 'meffsterile', 'nnu', 'ntrun', 'HMCode_A_baryon', 'HMCode_eta_baryon', 'HMCode_logT_AGN', 'cosmomc_theta', 'YHe', 'wa', 'cs2', 'H0', 'mnu', 'Alens', 'TCMB', 'ns', 'nrun', 'As', 'nt', 'r', 'w', 'omch2' }) params2 = camb.get_valid_numerical_params( dark_energy_model='AxionEffectiveFluid') self.assertEqual(params2.difference(params), {'fde_zc', 'w_n', 'zc', 'theta_i'})