Esempio n. 1
0
 def dosph(self, n, x, f, tilt=1.5, extrap=True, q1=1e-3, q2=5e2):
     f = f * self.renorm
     if not self.extrapker:
         return sph(x, nu=n, q=tilt)(f, extrap=extrap)
     else:
         q, p = sph(x, nu=n, q=tilt)(f, extrap=extrap)
         q1, q2 = numpy.where(q > q1)[0][0], numpy.where(q > q2)[0][0]
         qv = numpy.logspace(-6, 7, 1e4)
         ip = self.loginterp(q[q1:q2], p[q1:q2])
         return (qv, ip(qv))
Esempio n. 2
0
    def template(self,
                 k,
                 l,
                 func,
                 expon,
                 suppress,
                 power=1,
                 za=False,
                 expon_za=1.,
                 tilt=None,
                 species='mm'):
        '''
        Generic template that is followed by mu integrals
        j0 is different since its exponent has sigma subtracted that is
        later used to suppress integral
        '''

        Fq = np.zeros_like(self.qv)

        if za == True and l == 0:
            Fq = expon_za * func * (self.yq)**l
        else:
            Fq = expon * func * (self.yq)**l

        if tilt is not None:
            q = max(0, tilt - l)
        else:
            q = max(0, 1.5 - l)

        # note that the angular integral for even powers of mu gives J_(l+1)
        ktemp, ftemp = sph(self.qv, nu=l + (power % 2), q=q)(Fq * self.renorm,
                                                             extrap=False)
        ftemp *= suppress

        return 1 * k**l * np.interp(k, ktemp, ftemp)
Esempio n. 3
0
    def template_MII(self,
                     k,
                     l,
                     func,
                     expon,
                     suppress,
                     power=1,
                     za=False,
                     expon_za=1.,
                     tilt=None):
        ''' Generic template that is followed by mu integrals using method MII.
            j0 is different since its exponent has sigma subtracted that is
            later used to suppress integral
            '''

        Fq = np.zeros_like(self.qv)

        if za == True and l == 0:
            #Fq = expon_za * func * (-2./k/self.qv)**l
            Fq = expon * func * (-2. / k / self.qv)**l - 1
        else:
            Fq = expon * func * (-2. / k / self.qv)**l

        if tilt is not None:
            q = tilt
        else:
            q = 1.5 - l

        # note that the angular integral for even powers of mu gives J_(l+1)
        ktemp, ftemp = sph(self.qv, nu=l + (power % 2), q=q)(Fq * self.renorm,
                                                             extrap=False)
        ftemp *= suppress

        return np.interp(k, ktemp, ftemp)
Esempio n. 4
0
def dosph(n, x, f, a, tilt=1.5):

    # Function to calculate spherical Bessel integrals returns q values and integral values
    # Parameters: n = order of Bessel, x = variable of the function, f = function integrating over, a = power law

    func = renorm * np.power(x, a) * f(x)

    return sph(x, nu=n, q=tilt, lowring=True)(func, extrap=True)
Esempio n. 5
0
def template(k, func, extrap=False):
    '''Template for higher bessel integrals
    '''
    expon = numpy.exp(-0.5 * k**2 * (XYlin))
    Fq = 0
    toret = 0
    for l in range(1, jn):
        Fq = expon * func(k=k, l=l) * yq**l
        ktemp, ftemp = \
                sph(qv, nu= l, q=max(0, 1.5 - l))(Fq*renorm, extrap = extrap)
        toret += 1 * k**l * numpy.interp(k, ktemp, ftemp)
    return toret * 4 * np.pi
Esempio n. 6
0
    def template(self,
                 k,
                 l,
                 func,
                 expon,
                 suppress,
                 power=1,
                 za=False,
                 expon_za=1.,
                 tilt=None):
        ''' Simplified vs the original code. Beta.
            Generic template that is followed by mu integrals
        j0 is different since its exponent has sigma subtracted that is
        later used to suppress integral
        '''

        Fq = np.zeros_like(self.qv)

        if za == True and l == 0:
            Fq = expon_za * func * self.yq**l
        else:
            Fq = expon * func * self.yq**l

        if tilt is not None:
            q = max(0, tilt - l)
        else:
            q = max(0, 1.5 - l)

        # note that the angular integral for even powers of mu gives J_(l+1)
        ktemp, ftemp = sph(self.qv, nu=l + (power % 2), q=q)(Fq * self.renorm,
                                                             extrap=False)

        #        if l or ( power%2 == 1 ): # note that the angular integral for even powers of mu gives J_(l+1)
        #    Fq = expon*func*self.yq**l
        #elif j0:
        #    Fq = expon0*func
        #
        #if power == 1:
        #    ktemp, ftemp = \
        #        sph(self.qv, nu= l+1, q=max(0, 1.5 - l))(Fq*self.renorm,\
        #        extrap = False)
        #            #else:
        #            #ktemp, ftemp = \
        #        sph(self.qv, nu= l, q=max(0, 1.5 - l))(Fq*self.renorm,\
        #                                                 extrap = False)

        ftemp *= suppress

        return 1 * k**l * np.interp(k, ktemp, ftemp)
Esempio n. 7
0
def template0(k, func, extrap=False):
    '''Template for j0 integral
    '''
    expon0 = numpy.exp(-0.5 * k**2 * (XYlin - sigma))
    suppress = numpy.exp(-0.5 * k**2 * sigma)
    Fq = expon0 * func(k=k, l=0)
    if abs(func(k=k, l=0)[-1]) > 1e-7:
        #print("Subtracting large scale constant = ", func(0)[-1], k)
        sigma2 = func(k=k, l=0)[-1]
        #print(sigma2)
        Fq -= sigma2
    ktemp, ftemp = \
            sph(qv, nu= 0, q=1.5)(Fq*renorm,extrap = extrap)
    ftemp *= suppress
    return 1 * numpy.interp(k, ktemp, ftemp) * 4 * np.pi
Esempio n. 8
0
    def template(self, k, l, func, expon, expon0, suppress, j0=True):
        '''Generic template that is followed by mu integrals
        j0 is different since its exponent has sigma subtracted that is
        later used to suppress integral
        '''
        Fq = numpy.zeros_like(self.qv)
        if l:
            Fq = expon * func * self.yq**l
        elif j0:
            Fq = expon0 * func


        ktemp, ftemp = \
            sph(self.qv, nu= l, q=max(0, 1.5 - l))(Fq*self.renorm,\
                extrap = False)
        if l == 0 and j0:
            ftemp *= suppress
        return 1 * k**l * numpy.interp(k, ktemp, ftemp)
Esempio n. 9
0
    def template_MI(self,
                    k,
                    l,
                    func,
                    expon,
                    suppress,
                    power=0,
                    za=False,
                    expon_za=1.,
                    tilt=None,
                    pair='mm'):
        ''' Generic template that is followed by mu integrals using method MI.
            j0 is different since its exponent has sigma subtracted that is
            later used to suppress integral
            '''

        D2 = self.D**2
        Fq = np.zeros_like(self.qv)

        if za == True and l == 0:
            #Fq = expon_za * func * (-2./k/self.qv)**l
            Fq = expon * func - 1
        else:
            Fq = expon * func * (D2 * self.yqs[pair])**l

        if tilt is not None:
            q = tilt
        else:
            q = max(0, 1.5 - l)

        # note that the angular integral for even powers of mu gives J_(l+1)
        ktemp, ftemp = sph(self.qv, nu=l + power, q=q)(Fq * self.renorm,
                                                       extrap=False)

        ftemp *= suppress

        return 1 * k**l * np.interp(k, ktemp, ftemp)
Esempio n. 10
0
 def dosph(self, n, x, f, tilt=1.5, extrap=True):
     #Function to do bessel integral using FFTLog for kernels
     f = f * self.renorm
     return sph(x, nu=n, q=tilt)(f, extrap=extrap)
Esempio n. 11
0
def dosph(n, x, f, a, tilt=1.5):

    func = renorm * np.power(x, a) * f(x)

    return sph(x, nu=n, q=tilt, lowring=True)(func, extrap=True)
Esempio n. 12
0
def get_Pktharray(output_nl_grid,
                  klin,
                  knl,
                  Pkzlin,
                  Pnl_kz,
                  usePNL_for_Pk=True,
                  pt_type=None,
                  Pk_terms_names=None,
                  z_array=None,
                  output_xi=False,
                  use_fftlog=False):
    klinlog = np.log(klin)

    Pk0lin = Pkzlin[0, :]

    ind = np.where(klin > 0.03)[0][0]

    Growth = np.sqrt(Pkzlin[:, ind] / Pkzlin[0, ind])

    nk = 4 * len(
        klin
    )  # higher res increases runtime, decreases potential ringing at low-k
    # eps = 1e-6
    # eps = 0.
    # kmin = np.log10((1. + eps) * klin[0])
    # kmax = np.log10((1. - eps) * klin[-1])

    kmin = -6.0
    kmax = 3.0

    klin_fpt = np.logspace(kmin, kmax, nk)
    k1log = np.log(klin_fpt)
    #    pinterp=interp1d(klinlog,np.log(Pk0lin),bounds_error=False, fill_value="extrapolate")
    plininterp = interp1d(klinlog,
                          np.log(Pk0lin),
                          fill_value='extrapolate',
                          bounds_error=False)

    ## This interpolation should be at the input bounds. Extrapolate used to avoid failure due to numerical noise. No actual extrapolation is done. We could handle this using a margin or something else
    Plin_klin_fpt = np.exp(plininterp(k1log))

    if (knl[0] < klin_fpt[0]) or (knl[-1] > klin_fpt[-1]):
        EK1 = k_extend(klin_fpt, np.log10(knl[0]), np.log10(knl[-1]))
        klin_fpt = EK1.extrap_k()
        Plin_klin_fpt = EK1.extrap_P_low(Plin_klin_fpt)
        Plin_klin_fpt = EK1.extrap_P_high(Plin_klin_fpt)

    klin_fpt_log = np.log(klin_fpt)
    knl_log = np.log(knl)

    # print output_nl_grid
    if output_nl_grid:
        temp = intspline(klin_fpt_log, np.log(Plin_klin_fpt))
        Plin = np.exp(temp(knl_log))
        Pnl1 = Pnl_kz
        if usePNL_for_Pk:
            knl2mat = np.tile(knl**2, (Pnl_kz.shape[0], 1))
            k2Pnl1 = np.multiply(knl2mat, Pnl_kz)
        else:
            k2Pnl1 = np.outer(Growth**2, (knl**2) * Plin)

        if output_xi:
            renorm = np.sqrt(np.pi / 2.)

            if use_fftlog:
                myfftlog = fftlog(knl, (knl**3) * Plin,
                                  nu=1.5,
                                  c_window_width=0.2)
                r_lin, xi_lin_z0 = myfftlog.fftlog(0)
            else:
                r_lin, xitemp = sph(knl, nu=0, q=1.5)(Plin * renorm,
                                                      extrap=True)
                xi_lin_z0 = (1 / (2 * np.pi**2)) * xitemp
            xi_lin = np.outer(Growth**2, xi_lin_z0)
            xi_nl = np.zeros(xi_lin.shape)
            xi_k2Pk = np.zeros(xi_lin.shape)
            for j in range(len(z_array)):
                if use_fftlog:
                    myfftlog = fftlog(knl, (knl**3) * Pnl_kz[j, :],
                                      nu=1.5,
                                      c_window_width=0.2)
                    _, xi_basis = myfftlog.fftlog(0)
                else:
                    _, xitemp = sph(knl, nu=0, q=1.5)(Pnl_kz[j, :] * renorm,
                                                      extrap=True)
                    xi_basis = (1 / (2 * np.pi**2)) * xitemp

                xi_nl[j, :] = xi_basis

                if use_fftlog:
                    myfftlog = fftlog(knl, (knl**3) * k2Pnl1[j, :],
                                      nu=1.5,
                                      c_window_width=0.2)
                    _, xi_basis = myfftlog.fftlog(0)
                else:
                    _, xitemp = sph(knl, nu=0, q=1.5)(k2Pnl1[j, :] * renorm,
                                                      extrap=True)
                    xi_basis = (1 / (2 * np.pi**2)) * xitemp
                xi_k2Pk[j, :] = xi_basis
    else:
        Plin = Plin_klin_fpt
        Pnl1 = Pnl_kz
        if usePNL_for_Pk:
            k2Pnl1 = np.outer(Growth**2, (klin_fpt**2) * Pnl1[0, :])
        else:
            k2Pnl1 = np.outer(Growth**2, (klin_fpt**2) * Plin)

    Plin_kz = np.outer(Growth**2, Plin)

    n_pad = len(klin_fpt)

    if pt_type in ['oneloop_eul_bk']:

        fastpt = FASTPT.FASTPT(klin_fpt,
                               to_do=['one_loop_dd'],
                               low_extrap=-5,
                               high_extrap=3,
                               n_pad=n_pad)
        PXXNL_b1b2bsb3nl = fastpt.one_loop_dd_bias_b3nl(Plin_klin_fpt,
                                                        C_window=.75)

        if output_nl_grid:

            temp = intspline(klin_fpt_log, (PXXNL_b1b2bsb3nl[2]))
            Pd1d2 = np.outer(Growth**4, (temp(knl_log)))
            if output_xi:
                if use_fftlog:
                    myfftlog = fftlog(knl, (knl**3) * temp(knl_log),
                                      nu=1.5,
                                      c_window_width=0.2)
                    _, xi_d1d2_z0 = myfftlog.fftlog(0)
                else:
                    _, xitemp = sph(knl, nu=0, q=1.5)(temp(knl_log) * renorm,
                                                      extrap=True)
                    xi_d1d2_z0 = (1 / (2 * np.pi**2)) * xitemp
                xi_d1d2 = np.outer(Growth**4, xi_d1d2_z0)

            temp = intspline(klin_fpt_log, np.log(PXXNL_b1b2bsb3nl[3]))
            Pd2d2 = np.outer(Growth**4, np.exp(temp(knl_log)))
            if output_xi:
                if use_fftlog:
                    myfftlog = fftlog(knl, (knl**3) * np.exp(temp(knl_log)),
                                      nu=1.5,
                                      c_window_width=0.2)
                    _, xi_d2d2_z0 = myfftlog.fftlog(0)
                else:
                    _, xitemp = sph(knl, nu=0,
                                    q=1.5)(np.exp(temp(knl_log)) * renorm,
                                           extrap=True)
                    xi_d2d2_z0 = (1 / (2 * np.pi**2)) * xitemp
                xi_d2d2 = np.outer(Growth**4, xi_d2d2_z0)

            temp = intspline(klin_fpt_log, (PXXNL_b1b2bsb3nl[4]))
            Pd1s2 = np.outer(Growth**4, (temp(knl_log)))
            if output_xi:
                if use_fftlog:
                    myfftlog = fftlog(knl, (knl**3) * temp(knl_log),
                                      nu=1.5,
                                      c_window_width=0.2)
                    _, xi_d1s2_z0 = myfftlog.fftlog(0)
                else:
                    _, xitemp = sph(knl, nu=0, q=1.5)(temp(knl_log) * renorm,
                                                      extrap=True)
                    xi_d1s2_z0 = (1 / (2 * np.pi**2)) * xitemp
                xi_d1s2 = np.outer(Growth**4, xi_d1s2_z0)

            temp = intspline(klin_fpt_log, (PXXNL_b1b2bsb3nl[5]))
            Pd2s2 = np.outer(Growth**4, (temp(knl_log)))
            if output_xi:
                if use_fftlog:
                    myfftlog = fftlog(knl, (knl**3) * temp(knl_log),
                                      nu=1.5,
                                      c_window_width=0.2)
                    _, xi_d2s2_z0 = myfftlog.fftlog(0)
                else:
                    rval, xitemp = sph(knl, nu=0,
                                       q=1.5)(temp(knl_log) * renorm,
                                              extrap=False)
                    xi_d2s2_z0 = (1 / (2 * np.pi**2)) * xitemp
                    # pdb.set_trace()
                xi_d2s2 = np.outer(Growth**4, xi_d2s2_z0)

            temp = intspline(klin_fpt_log, np.log(PXXNL_b1b2bsb3nl[6]))
            Ps2s2 = np.outer(Growth**4, np.exp(temp(knl_log)))
            if output_xi:
                if use_fftlog:
                    myfftlog = fftlog(knl, (knl**3) * np.exp(temp(knl_log)),
                                      nu=1.5,
                                      c_window_width=0.2)
                    _, xi_s2s2_z0 = myfftlog.fftlog(0)
                else:
                    _, xitemp = sph(knl, nu=0,
                                    q=1.5)(np.exp(temp(knl_log)) * renorm,
                                           extrap=True)
                    xi_s2s2_z0 = (1 / (2 * np.pi**2)) * xitemp
                xi_s2s2 = np.outer(Growth**4, xi_s2s2_z0)

            temp = intspline(klin_fpt_log, (PXXNL_b1b2bsb3nl[7]))
            sig3nl = np.outer(Growth**4, (temp(knl_log)))
            if output_xi:
                if use_fftlog:
                    myfftlog = fftlog(knl, (knl**3) * temp(knl_log),
                                      nu=1.5,
                                      c_window_width=0.2)
                    _, xi_sig3nl_z0 = myfftlog.fftlog(0)
                else:
                    _, xitemp = sph(knl, nu=0, q=1.5)(temp(knl_log) * renorm,
                                                      extrap=True)
                    xi_sig3nl_z0 = (1 / (2 * np.pi**2)) * xitemp
                xi_sig3nl = np.outer(Growth**4, xi_sig3nl_z0)

            sig4 = np.outer(Growth**4, PXXNL_b1b2bsb3nl[8] * np.ones_like(knl))
        else:
            [Pd1d2, Pd2d2, Pd1s2, Pd2s2, Ps2s2, sig3nl, sig4] = [
                np.outer(Growth**4, PXXNL_b1b2bsb3nl[2]),
                np.outer(Growth**4, PXXNL_b1b2bsb3nl[3]),
                np.outer(Growth**4, PXXNL_b1b2bsb3nl[4]),
                np.outer(Growth**4, PXXNL_b1b2bsb3nl[5]),
                np.outer(Growth**4, PXXNL_b1b2bsb3nl[6]),
                np.outer(Growth**4, PXXNL_b1b2bsb3nl[7]),
                np.outer(
                    Growth**4,
                    PXXNL_b1b2bsb3nl[8] * np.ones_like(PXXNL_b1b2bsb3nl[0]))
            ]

        pdb.set_trace()
        Pk_th_array = [
            Plin_kz, Pnl1, Pd1d2, Pd2d2, Pd1s2, Pd2s2, Ps2s2, sig3nl, k2Pnl1,
            sig4
        ]
        if output_xi:
            xi_th_array = [
                xi_lin, xi_nl, xi_d1d2, xi_d2d2, xi_d1s2, xi_d2s2, xi_s2s2,
                xi_sig3nl, xi_k2Pk
            ]

    elif pt_type in ['oneloop_cleft_bk']:
        cl = cpool.CLEFT(k=klin_fpt, p=Plin_klin_fpt)
        Pk_th_array = np.zeros((len(Pk_terms_names), len(Growth), len(knl)))

        kinput_ind = np.where((knl < 4.) & (knl > 1e-3))[0]
        kinput = knl[kinput_ind]

        # pdb.set_trace()
        pk_table_f = cpool.get_nonlinear_kernels_wgroth(cl,
                                                        kinput,
                                                        koutput=knl,
                                                        Growth=Growth,
                                                        do_analysis=False,
                                                        Pnl_toplot=Pnl1,
                                                        z_array=z_array)

        Pk_th_array[1:-1, :, :] = pk_table_f
        Pk_th_array[0, :, :] = Plin_kz
        Pk_th_array[1, :, :] = Pnl1
        Pk_th_array[-1, :, :] = k2Pnl1
    else:
        Pk_th_array = None
        print('give correct pt_type')

    if output_nl_grid:
        kout = knl
    else:
        kout = klin_fpt

    if output_xi:
        return Pk_th_array, kout, xi_th_array, r_lin
    else:
        return Pk_th_array, kout