1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- """Compare the H1 observations of the Antennae to the simulation"""
- import matplotlib.pyplot as plt
- import numpy as np
- from analysis import utils
- # These paremeters were checked by running an interactive version of this function
- def plot2d(i=135, theta=1.86, phi=4.10, view=5.10, scaling=12, v_scaling=150, v_offset=43, x_offset=-4, y_offset=2):
- """Plot an encounter
- Parameters:
- i (int): timestep
- theta (float): polar angle
- phi (float): azimuthal angle
- view (float): rotation along line of sight
- scaling (float): scaling of the position vectors
- v_scaling (float): scaling of the line of sight velocity
- v_offset (float): offset of the line of sight velocity
- x_offset (float): position offset in the x direction
- y_offset (float): position offset in the y direction
- """
- data = utils.loadData('antennae', 13500)
- r_vec, v_vec = data['r_vec'], data['v_vec']*v_scaling
- mask = data['type'][:,0] == 'disk'
- r_vec, v_vec = r_vec[mask], v_vec[mask]
-
-
- # Viewing angles
- M1 = np.array([[1, 0, 0],
- [0, np.cos(theta), np.sin(theta)],
- [0, -np.sin(theta), np.cos(theta)]])
- M2 = np.array([[np.cos(phi), np.sin(phi), 0],
- [-np.sin(phi), np.cos(phi), 0],
- [0, 0, 1]])
- M3 = np.array([[np.cos(view), np.sin(view), 0],
- [-np.sin(view), np.cos(view), 0],
- [0, 0, 1]])
-
- M = np.matmul(M2, np.matmul(M1, M3))
- r_vec = np.tensordot(r_vec, M, axes=[1,0])
- v_vec = np.tensordot(v_vec, M, axes=[1,0])
-
- # Offsets
- r_vec[:,0] = r_vec[:,0]*scaling + x_offset
- r_vec[:,1] = r_vec[:,1]*scaling + y_offset
- v_vec[:,2] += v_offset
- f, axs = plt.subplots(2, 2, figsize=((11+14/1.97)/2, (14+11/1.54)/2),
- gridspec_kw = {'width_ratios':[11, 14/1.97], 'height_ratios':[14, 11/1.54]})
-
- # Plot background images
- # We manually derive the region that must be plotted based on
- # the data from Hibbard
- axs[0,0].imshow(plt.imread('literature/figs/hibbard1.png'),
- extent=[-58.2, 88.6, -86.5, 78.7])
- axs[1,0].imshow(plt.imread('literature/figs/hibbard3.png'),
- extent=[-58.2, 88.6, -270, 310])
- axs[0,1].imshow(plt.imread('literature/figs/hibbard2.png'),
- extent=[-270, 310, -86.5, 78.7])
-
- # Plot
- axs[0,0].scatter(r_vec[:,0], r_vec[:,1], s=3, edgecolor='', alpha=3E-1)
- axs[1,0].scatter(r_vec[:,0], v_vec[:,2], s=3, edgecolor='', alpha=3E-1)
- axs[0,1].scatter(v_vec[:,2], r_vec[:,1], s=3, edgecolor='', alpha=3E-1)
- f.subplots_adjust(hspace=0, wspace=0)
-
- # Get the correct scales on all axes
- axs[0,0].set_xlim((-58.2, 88.6))
- axs[0,0].set_ylim((-86.5, 78.7))
- axs[1,0].set_xlim((-58.2, 88.6))
- axs[1,0].set_ylim((-270, 310))
- axs[1,0].set_aspect((88.6 + 58.2)/(270+310) / 1.54)
- axs[0,1].set_ylim((-86.5, 78.7))
- axs[0,1].set_xlim((-270, 310))
- axs[0,1].set_aspect((270+310)/(86.5 + 78.7) * 1.97)
- axs[1,1].axis('off')
-
- # Styling
- utils.stylizePlot(axs.flatten())
- axs[0,1].set_xlabel(r'$v_{los}$ / km s$^{-1}$', fontsize=14)
- axs[1,0].set_ylabel(r'$v_{los}$ / km s$^{-1}$', fontsize=14)
- axs[1,0].set_xlabel(r'$x$ / kpc', fontsize=14)
- axs[0,0].set_ylabel(r'$y$ / kpc', fontsize=14)
-
- plt.show()
-
- plot2d()
|