Source code for pyccl.neutrinos

import numpy as np
from . import ccllib as lib
from .core import check

neutrino_mass_splits = {
    'normal':      lib.nu_normal,
    'inverted': lib.nu_inverted,
    'equal':   lib.nu_equal,
    'sum':   lib.nu_sum,
}


[docs]def Omeganuh2(a, m_nu, T_CMB=None): """Calculate Omega_nu * h^2 at a given scale factor given the sum of the neutrino masses. .. note:: for all practical purposes, Neff is simply N_nu_mass. Args: a (float or array-like): Scale factor, normalized to 1 today. m_nu (float or array-like): Neutrino mass (in eV) T_CMB (float, optional): Temperature of the CMB (K). Default: 2.725. Returns: float or array_like: corresponding to a given neutrino mass. """ status = 0 scalar = True if np.ndim(a) == 0 else False if T_CMB is None: T_CMB = lib.cvar.constants.T_CMB # Convert to array if it's not already an array if not isinstance(a, np.ndarray): a = np.array([a, ]).flatten() if not isinstance(m_nu, np.ndarray): m_nu = np.array([m_nu, ]).flatten() N_nu_mass = len(m_nu) # Call function OmNuh2, status = lib.Omeganuh2_vec(N_nu_mass, T_CMB, a, m_nu, a.size, status) # Check status and return check(status) if scalar: return OmNuh2[0] return OmNuh2
[docs]def nu_masses(OmNuh2, mass_split, T_CMB=None): """Returns the neutrinos mass(es) for a given OmNuh2, according to the splitting convention specified by the user. Args: OmNuh2 (float): Neutrino energy density at z=0 times h^2 mass_split (str): indicates how the masses should be split up Should be one of 'normal', 'inverted', 'equal' or 'sum'. T_CMB (float, optional): Temperature of the CMB (K). Default: 2.725. Returns: float or array-like: Neutrino mass(es) corresponding to this Omeganuh2 """ status = 0 if T_CMB is None: T_CMB = lib.cvar.constants.T_CMB if mass_split not in neutrino_mass_splits.keys(): raise ValueError( "'%s' is not a valid species type. " "Available options are: %s" % (mass_split, neutrino_mass_splits.keys())) # Call function if ((mass_split == 'normal') or (mass_split == 'inverted') or (mass_split == 'equal')): mnu, status = lib.nu_masses_vec( OmNuh2, neutrino_mass_splits[mass_split], T_CMB, 3, status) elif mass_split == 'sum': mnu, status = lib.nu_masses_vec( OmNuh2, neutrino_mass_splits[mass_split], T_CMB, 1, status) mnu = mnu[0] # Check status and return check(status) return mnu