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
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
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
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
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
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()