def power_forward_conversion_lm(k_space, p, mean=0): """ This function is designed to convert a theoretical/statistical power spectrum of a Gaussian field to the theoretical power spectrum of the exponentiated field. The function only works for power spectra defined for lm_spaces Parameters ---------- k_space : nifty.rg_space, a regular grid space with the attribute `Fourier = True` p : np.array, the power spectrum of the Gaussian field. Needs to have the same number of entries as `k_space.get_power_indices()[0]` m : float, *optional* specifies the mean of the Gaussian field (default: 0). Returns ------- p1 : np.array, the power spectrum of the exponentiated Gaussian field. References ---------- .. [#] M. Greiner and T.A. Ensslin, "Log-transforming the matter power spectrum"; `arXiv:1312.1354 <http://arxiv.org/abs/1312.1354>`_ """ m = mean klen = k_space.get_power_indices()[0] C_0_Omega = field(k_space, val=0) C_0_Omega.val[:len(klen)] = p * sqrt(2 * klen + 1) / sqrt(4 * pi) C_0_Omega = C_0_Omega.transform() C_0_0 = (p * (2 * klen + 1) / (4 * pi)).sum() exC = exp(C_0_Omega + C_0_0 + 2 * m) Z = exC.transform() spec = Z.val[:len(klen)] spec = spec * sqrt(4 * pi) / sqrt(2 * klen + 1) spec = np.real(spec) if (np.any(spec < 0.)): spec = spec * (spec > 0.) about.warnings.cprint("WARNING: negative modes set to zero.") return spec
def power_forward_conversion_lm(k_space,p,mean=0): """ This function is designed to convert a theoretical/statistical power spectrum of a Gaussian field to the theoretical power spectrum of the exponentiated field. The function only works for power spectra defined for lm_spaces Parameters ---------- k_space : nifty.rg_space, a regular grid space with the attribute `Fourier = True` p : np.array, the power spectrum of the Gaussian field. Needs to have the same number of entries as `k_space.get_power_indices()[0]` m : float, *optional* specifies the mean of the Gaussian field (default: 0). Returns ------- p1 : np.array, the power spectrum of the exponentiated Gaussian field. References ---------- .. [#] M. Greiner and T.A. Ensslin, "Log-transforming the matter power spectrum"; `arXiv:1312.1354 <http://arxiv.org/abs/1312.1354>`_ """ m = mean klen = k_space.get_power_indices()[0] C_0_Omega = field(k_space,val=0) C_0_Omega.val[:len(klen)] = p*sqrt(2*klen+1)/sqrt(4*pi) C_0_Omega = C_0_Omega.transform() C_0_0 = (p*(2*klen+1)/(4*pi)).sum() exC = exp(C_0_Omega+C_0_0+2*m) Z = exC.transform() spec = Z.val[:len(klen)] spec = spec*sqrt(4*pi)/sqrt(2*klen+1) spec = np.real(spec) if(np.any(spec<0.)): spec = spec*(spec>0.) about.warnings.cprint("WARNING: negative modes set to zero.") return spec
def power_forward_conversion_rg(k_space,p,mean=0,bare=True): """ This function is designed to convert a theoretical/statistical power spectrum of a Gaussian field to the theoretical power spectrum of the exponentiated field. The function only works for power spectra defined for rg_spaces Parameters ---------- k_space : nifty.rg_space, a regular grid space with the attribute `Fourier = True` p : np.array, the power spectrum of the Gaussian field. Needs to have the same number of entries as `k_space.get_power_indices()[0]` mean : float, *optional* specifies the mean of the Gaussian field (default: 0). bare : bool, *optional* whether `p` is the bare power spectrum or not (default: True). Returns ------- p1 : np.array, the power spectrum of the exponentiated Gaussian field. References ---------- .. [#] M. Greiner and T.A. Ensslin, "Log-transforming the matter power spectrum"; `arXiv:1312.1354 <http://arxiv.org/abs/1312.1354>`_ """ pindex = k_space.get_power_indices()[2] spec = power_operator(k_space,spec=p,bare=bare).get_power(bare=False) S_x = field(k_space,val=spec[pindex]).transform() S_0 = k_space.calc_weight(spec[pindex],1).sum() pf = exp(S_x+S_0+2*mean) p1 = sqrt(pf.power()) if(bare==True): return power_operator(k_space,spec=p1,bare=False).get_power(bare=True).real else: return p1.real