Esempio n. 1
0
def scf_density_grid_fast(x,
                          y,
                          z,
                          Smw,
                          Tmw,
                          Slmc,
                          Tlmc,
                          nbins,
                          rs_mw,
                          rs_lmc,
                          lmc_com,
                          quantity,
                          G=1):

    q_all = np.zeros((nbins, nbins, nbins))
    xyz_lmc = np.array([x - lmc_com[0], y - lmc_com[1], z - lmc_com[2]]).T
    xyz = np.array([x, y, z]).T
    print(len(xyz_lmc[:, 0]))
    print(xyz_lmc[:, 0])
    if quantity == "density":
        q_all = biff.density(np.ascontiguousarray(xyz_lmc), Slmc, Tlmc, M=1, r_s=rs_lmc) \
                + biff.density(np.ascontiguousarray(xyz), Smw, Tmw, M=1, r_s=rs_mw)

    if quantity == "potential":
        q_all = biff.potential(np.ascontiguousarray(xyz_lmc), Slmc, Tlmc, M=1, r_s=rs_lmc, G=G) \
                + biff.potential(np.ascontiguousarray(xyz), Smw, Tmw, M=1, r_s=rs_mw, G=G)

    if quantity == "acceleration":
        almc = biff.gradient(xyz_lmc, Slmc, Tlmc, M=1, r_s=rs_lmc, G=G)
        amw = biff.gradient(xyz, Smw, Tmw, M=1, r_s=rs_mw, G=G)
        q_all = np.sqrt(np.sum(almc**2, axis=1)) + np.sqrt(
            np.sum(amw**2, axis=1))

    return q_all
    def a_bfe_all(self, S, T, S_mw, T_mw, S_mw_wake, T_mw_wake, S_lmc, T_lmc,
                  S_mwlmc, T_mwlmc):
        xyz, xyz_shift = self.grid_cartessian()
        a_mon = biff.gradient(xyz, S, T, M=1, r_s=self.rs, G=self.G_gadget)
        a_mwwake = biff.gradient(xyz,
                                 S_mw,
                                 T_mw,
                                 G=self.G_gadget,
                                 M=1,
                                 r_s=self.rs)
        a_wake = biff.gradient(xyz,
                               S_mw_wake,
                               T_mw_wake,
                               M=1,
                               r_s=self.rs,
                               G=self.G_gadget)
        a_mwlmc = biff.gradient(xyz,
                                S_mwlmc,
                                T_mwlmc,
                                M=1,
                                G=self.G_gadget,
                                r_s=self.rs)
        # shift
        a_lmcshift = biff.gradient(xyz_shift,
                                   S_lmc,
                                   T_lmc,
                                   M=1,
                                   G=self.G_gadget,
                                   r_s=self.rs_sat)
        #a_lmcshift = biff.gradient(xyz, S_lmc, T_lmc, M=1, G=self.G_gadget, r_s=self.rs_sat)

        return a_mon, a_mwwake, a_wake, a_lmcshift, a_mwlmc
Esempio n. 3
0
def acceleration_plot(S, T, SS, TT, ST, figname, cbar_name):
    sn = [0, 1, 2, 3, 4, 5]
    fig = plt.figure(figsize=(10, 14))
    for i in range(len(sn)):
        S_smooth, T_smooth, N_smooth = coefficients_smoothing.smooth_coeff_matrix(
            S, T, SS, TT, ST, mass, 20, 20, 20, sn[i])
        a_biff = biff.gradient(np.ascontiguousarray(xyz),
                               S_smooth,
                               T_smooth,
                               M=1,
                               r_s=40.85,
                               G=1)
        a_biff_all = np.sqrt(a_biff[:, 0]**2 + a_biff[:, 1]**2 +
                             a_biff[:, 2]**2)

        a_biff_0 = biff.gradient(np.ascontiguousarray(xyz),
                                 np.array([[[S_smooth[0, 0, 0]], [0], [0]]]).T,
                                 np.array([[[T_smooth[0, 0, 0]], [0], [0]]]).T,
                                 M=1,
                                 r_s=40.85,
                                 G=1)

        a_biff_all_0 = np.sqrt(a_biff_0[:, 0]**2 + a_biff_0[:, 1]**2 +
                               a_biff_0[:, 2]**2)

        plt.subplot(3, 2, i + 1)
        #levels = np.arange(-0.03, 0.12, 0.005)
        im = plt.contourf(y_grid,
                          z_grid, ((a_biff_all / a_biff_all_0) - 1).reshape(
                              bins, bins),
                          40,
                          origin='lower',
                          cmap='viridis')

        plt.text(-180, 160, 'Ncoeff={}'.format(N_smooth), color='w')
        plt.text(-180, 130, 'S/N={}'.format(sn[i]), color='w')

        plt.xlim(-200, 200)
        plt.ylim(-200, 200)
        if ((i == 4) | (i == 5)):
            plt.xlabel('y[kpc]')
        if (i + 1) % 2 == 1:
            plt.ylabel('z[kpc]')
    cb_ax = fig.add_axes([0.93, 0.1, 0.02, 0.8])
    cbar = plt.colorbar(im, cax=cb_ax)
    fig.suptitle(
        'Relative acceleration of MW + LMC unbound particles {}'.format(
            cbar_name),
        y=0.93)
    cbar.set_label('$\Delta |a|$')
    plt.savefig(figname + '.pdf', bbox_inches='tight')
    plt.savefig(figname + '.png', bbox_inches='tight')
    return 0
Esempio n. 4
0
def combine_bfe_a(S1, T1, S2, T2, y_grid, z_grid, lmc_com, nbins):
    a_mwlmc = np.zeros((nbins, nbins))
    for i in range(nbins):
        for j in range(nbins):
            a = biff.gradient(np.array([[0-lmc_com[0]],
                                       [y_grid[0][i]-lmc_com[1]],
                                       [z_grid[j,0]-lmc_com[2]]]).T,
							 S2, T2, M=1,r_s=10, G=1) + \
                biff.gradient(np.array([[0], [y_grid[0][i]], [z_grid[j,0]]]).T,
							 S1, T1, M=1, r_s=40.85, G=1)
    a_mwlmc[i][j] = (a[:,0]**2 + a[:,1]**2 + a[:,2]**2)**0.5	
    
    return a_mwlmc
Esempio n. 5
0
def bfe_a_grid(S1, T1, y_grid, z_grid, nbins, rs):
    xyz = np.ascontiguousarray(np.array([np.zeros(len(y_grid.flatten())),
                                             y_grid.flatten(),
                                             z_grid.flatten()]).T)
    a = biff.gradient(xyz, S1, T1, M=1, r_s=rs, G=1) 
    a_mw = (a[:,0]**2 + a[:,1]**2 + a[:,2]**2)**0.5	
    return a_mw
Esempio n. 6
0
    def _ln_potential_prior(self, pars):
        lp = 0.
        lp += -(pars['Snlm']**2).sum()

        grad = biff.gradient(self._xyz,
                             Snlm=pars['Snlm'],
                             Tnlm=pars['Tnlm'],
                             nmax=self.nmax,
                             lmax=0,
                             G=_G,
                             M=pars['m'],
                             r_s=pars['r_s'])
        if np.any(grad < 0.):
            return -np.inf

        dens = biff.density(self._xyz,
                            Snlm=pars['Snlm'],
                            Tnlm=pars['Tnlm'],
                            nmax=self.nmax,
                            lmax=0,
                            M=pars['m'],
                            r_s=pars['r_s'])
        if np.any(dens < 0.):
            return -np.inf

        return lp
Esempio n. 7
0
def scf_density_grid(x,
                     y,
                     z,
                     Smw,
                     Tmw,
                     Slmc,
                     Tlmc,
                     nbins,
                     rs_mw,
                     rs_lmc,
                     lmc_com,
                     quantity,
                     G=1):

    q_all = np.zeros((nbins, nbins, nbins))
    for i in range(nbins):
        for j in range(nbins):
            for k in range(nbins):
                # These line is flipping x with y!
                xyz_lmc = np.array([[x[0, i, 0] - lmc_com[0]],
                                    [y[j, 0, 0] - lmc_com[1]],
                                    [z[0, 0, k] - lmc_com[2]]]).T
                xyz = np.array([[x[0, i, 0]], [y[j, 0, 0]], [z[0, 0, k]]]).T

                if quantity == "density":
                    q_all[i][j][k] = \
                        biff.density(xyz_lmc, Slmc, Tlmc, M=1, r_s=rs_lmc) \
                        + biff.density(xyz, Smw, Tmw, M=1, r_s=rs_mw)

                if quantity == "potential":
                    q_all[i][j][k] = \
                        biff.potential(np.ascontiguousarray(xyz_lmc), Slmc, Tlmc, M=1, r_s=rs_lmc,
                                G=G) \
                        + biff.potential(np.ascontiguousarray(xyz), Smw, Tmw, M=1, r_s=rs_mw, G=G)

                if quantity == "acceleration":
                    almc = biff.gradient(xyz_lmc,
                                         Slmc,
                                         Tlmc,
                                         M=1,
                                         r_s=rs_lmc,
                                         G=G)
                    amw = biff.gradient(xyz, Smw, Tmw, M=1, r_s=rs_mw, G=G)
                    q_all[i][j][k] = np.sqrt(np.sum(almc**2)) \
                        + np.sqrt(np.sum(amw**2))

    return q_all.flatten()
Esempio n. 8
0
    def _ln_potential_prior(self, pars):
        lp = 0.
        lp += -(pars['Snlm']**2).sum()

        grad = biff.gradient(self._xyz, Snlm=pars['Snlm'], Tnlm=pars['Tnlm'],
                             nmax=self.nmax, lmax=0, G=_G, M=pars['m'], r_s=pars['r_s'])
        if np.any(grad < 0.):
            return -np.inf

        dens = biff.density(self._xyz, Snlm=pars['Snlm'], Tnlm=pars['Tnlm'],
                            nmax=self.nmax, lmax=0, M=pars['m'], r_s=pars['r_s'])
        if np.any(dens < 0.):
            return -np.inf

        return lp