analysis.inclination module
Plot a survey of the inclination angle
Source code
"""Plot a survey of the inclination angle"""
import matplotlib.pyplot as plt
import numpy as np
from analysis import utils
def plotEdgeView(data, ax, axisOn):
    """Plot the encounter as viewed from the edge of the galaxy
    Parameters:
        ax: the matplotlib axis where the data should be plotted
        data: a data dictionary in the format saved by the simulation
        axisOn (bool): whether to include the y axis in this subplot.
            It can be omitted when it is shared among subplots.
    """
    r_vec = data['r_vec']
    theta, phi = data['CONFIG']['galaxy1']['orientation']
    # Obtain the edge view, rotate 90º around y axis
    spin = np.array([np.sin(theta)*np.cos(phi), 
            np.sin(theta)*np.sin(phi), 
            np.cos(theta)])
    phi = np.pi/2
    M = np.array([[np.cos(-phi), 0,np.sin(-phi)], 
        [0, 1, 0], 
        [-np.sin(-phi), 0, np.cos(-phi)]])
    r_vec = np.einsum('ai,ij->aj', r_vec, M)
    spin = np.einsum('i,ij->j', spin, M)
    data['tracks'] = np.einsum('abi,ij->abj', data['tracks'], M)
    data['tracks'] -= r_vec[0,:] #Relative to center of galaxy
    r_vec[:,:] -= r_vec[0,:] 
    # Flip y to be consistent with Toomre and Toomre
    r_vec[:,1] = -r_vec[:,1]
    data['tracks'][:,:,1] *= -1
    # Plotting
    utils.plotCenterMasses(ax, {'r_vec': r_vec, 'type':data['type']})
    ax.plot(data['tracks'][1,:,0], data['tracks'][1,:,1], 
        c='black', alpha=1.0, linewidth=1)
    ax.scatter(r_vec[:,0], r_vec[:,1], s=0.01, marker='.', 
        c='#c40f4c', alpha=.6)
    utils.setSize(ax, x=(-1.5, 1.5), y=(-1.5,3.5), mode='square')
    utils.stylizePlot([ax])
    utils.setAxes(ax, x=r'x / $r_{min}$', y=r'y / $r_{min}$', 
        ycoords=(-0.2, .8), mode=('bottomleft' if axisOn else 'bottom'))
    
def plotFrontalView(data, ax, axisOn):
    """Plot the encounter as viewed normal to the galactic plane
    Parameters:
        ax: the matplotlib axis where the data should be plotted
        data: a data dictionary in the format saved by the simulation
        axisOn (bool): whether to include the y axis in this subplot.
            It can be omitted when it is shared among subplots.
    """
    r_vec = data['r_vec']
    theta, phi = data['CONFIG']['galaxy1']['orientation']
    
    # Rotate the position vectors into the appropiate view
    M2 = np.array([[np.cos(-phi), np.sin(-phi), 0],
        [-np.sin(-phi), np.cos(-phi), 0],
        [0, 0, 1]])
    M1 = np.array([[1, 0, 0],
        [0, np.cos(-theta), np.sin(-theta)],
        [0, -np.sin(-theta), np.cos(-theta)]])
    r_vec = np.einsum('ai,ij->aj', np.einsum('ai,ij->aj', r_vec, M2), M1)
    data['tracks'] = np.einsum('abi,ij->abj', data['tracks'], M2)
    data['tracks'] = np.einsum('abi,ij->abj', data['tracks'], M1)
    data['tracks'] -= data['tracks'][0]
    r_vec[:,:] -= r_vec[0,:]
    #Plotting
    utils.plotCenterMasses(ax, {'r_vec': r_vec, 'type':data['type']})
    utils.plotTracks(ax, data['tracks'])
    ax.scatter(r_vec[:,0], r_vec[:,1], c='#c40f4c', s=0.01, marker='.')
    utils.setSize(ax, x=(-3, 2), y=(-1.5, 1.5), mode='square')
    utils.stylizePlot([ax])
    utils.setAxes(ax, x=r'x / $r_{min}$', y=r'y / $r_{min}$', 
        ycoords=(-0.2, .8), mode=('bottomleft' if axisOn else 'bottom'))
#########################################################
# Select the inclinations
inclinations = [15, 45, 60, 90, 135]
f, axs = plt.subplots(2, len(inclinations),  figsize=(11, 6), 
    sharey=False, sharex=False, gridspec_kw = {'height_ratios':[5/3, 1]})
t = 5000 # time of plots
# Plot both views for each encounter
for i in range(len(inclinations)):
    data = utils.loadData('i{}'.format(inclinations[i]), t)
    plotEdgeView(data, ax=axs[0,i], axisOn=True if i==0 else False)
    data = utils.loadData('i{}'.format(inclinations[i]), t)
    plotFrontalView(data, ax=axs[1,i], axisOn=True if i==0 else False)
    
f.subplots_adjust(hspace=0, wspace=0)
plt.tight_layout()
plt.show()
Functions
def plotEdgeView(data, ax, axisOn)- 
Plot the encounter as viewed from the edge of the galaxy
Parameters
ax- the matplotlib axis where the data should be plotted
 data- a data dictionary in the format saved by the simulation
 axisOn:bool- whether to include the y axis in this subplot. It can be omitted when it is shared among subplots.
 
Source code
def plotEdgeView(data, ax, axisOn): """Plot the encounter as viewed from the edge of the galaxy Parameters: ax: the matplotlib axis where the data should be plotted data: a data dictionary in the format saved by the simulation axisOn (bool): whether to include the y axis in this subplot. It can be omitted when it is shared among subplots. """ r_vec = data['r_vec'] theta, phi = data['CONFIG']['galaxy1']['orientation'] # Obtain the edge view, rotate 90º around y axis spin = np.array([np.sin(theta)*np.cos(phi), np.sin(theta)*np.sin(phi), np.cos(theta)]) phi = np.pi/2 M = np.array([[np.cos(-phi), 0,np.sin(-phi)], [0, 1, 0], [-np.sin(-phi), 0, np.cos(-phi)]]) r_vec = np.einsum('ai,ij->aj', r_vec, M) spin = np.einsum('i,ij->j', spin, M) data['tracks'] = np.einsum('abi,ij->abj', data['tracks'], M) data['tracks'] -= r_vec[0,:] #Relative to center of galaxy r_vec[:,:] -= r_vec[0,:] # Flip y to be consistent with Toomre and Toomre r_vec[:,1] = -r_vec[:,1] data['tracks'][:,:,1] *= -1 # Plotting utils.plotCenterMasses(ax, {'r_vec': r_vec, 'type':data['type']}) ax.plot(data['tracks'][1,:,0], data['tracks'][1,:,1], c='black', alpha=1.0, linewidth=1) ax.scatter(r_vec[:,0], r_vec[:,1], s=0.01, marker='.', c='#c40f4c', alpha=.6) utils.setSize(ax, x=(-1.5, 1.5), y=(-1.5,3.5), mode='square') utils.stylizePlot([ax]) utils.setAxes(ax, x=r'x / $r_{min}$', y=r'y / $r_{min}$', ycoords=(-0.2, .8), mode=('bottomleft' if axisOn else 'bottom')) def plotFrontalView(data, ax, axisOn)- 
Plot the encounter as viewed normal to the galactic plane
Parameters
ax- the matplotlib axis where the data should be plotted
 data- a data dictionary in the format saved by the simulation
 axisOn:bool- whether to include the y axis in this subplot. It can be omitted when it is shared among subplots.
 
Source code
def plotFrontalView(data, ax, axisOn): """Plot the encounter as viewed normal to the galactic plane Parameters: ax: the matplotlib axis where the data should be plotted data: a data dictionary in the format saved by the simulation axisOn (bool): whether to include the y axis in this subplot. It can be omitted when it is shared among subplots. """ r_vec = data['r_vec'] theta, phi = data['CONFIG']['galaxy1']['orientation'] # Rotate the position vectors into the appropiate view M2 = np.array([[np.cos(-phi), np.sin(-phi), 0], [-np.sin(-phi), np.cos(-phi), 0], [0, 0, 1]]) M1 = np.array([[1, 0, 0], [0, np.cos(-theta), np.sin(-theta)], [0, -np.sin(-theta), np.cos(-theta)]]) r_vec = np.einsum('ai,ij->aj', np.einsum('ai,ij->aj', r_vec, M2), M1) data['tracks'] = np.einsum('abi,ij->abj', data['tracks'], M2) data['tracks'] = np.einsum('abi,ij->abj', data['tracks'], M1) data['tracks'] -= data['tracks'][0] r_vec[:,:] -= r_vec[0,:] #Plotting utils.plotCenterMasses(ax, {'r_vec': r_vec, 'type':data['type']}) utils.plotTracks(ax, data['tracks']) ax.scatter(r_vec[:,0], r_vec[:,1], c='#c40f4c', s=0.01, marker='.') utils.setSize(ax, x=(-3, 2), y=(-1.5, 1.5), mode='square') utils.stylizePlot([ax]) utils.setAxes(ax, x=r'x / $r_{min}$', y=r'y / $r_{min}$', ycoords=(-0.2, .8), mode=('bottomleft' if axisOn else 'bottom'))