In [ ]:
%matplotlib inline
import matplotlib.pyplot as plt
import yt
import logging
logging.getLogger('yt').setLevel(logging.ERROR)
import numpy as np
from yt import derived_field
nus = [(1500, 'MHz'), (150, 'MHz')]
proj_axis = 'x'
prj = {}
frb_I, frb_Q, frb_U = {}, {}, {}
I_bin, Q_bin, U_bin = {}, {}, {}
psi, frac = {}, {}
nu0 = nus[0]
nu1 = nus[1]
nus_str = ['%.1f %s' % nu0, '%.1f %s' % nu1]
for nu in nus:
qfname = 'nn_emissivity_q_lobe_%.1f%s' % nu
qnfname = ('flash', 'nn_emissivity_qn_lobe_%.1f%s' % nu)
@derived_field(name=qnfname, sampling_type='cell')
def _qn_emissivity(field, data):
#re = np.nan_to_num(data[qfname])
re = data[qfname]
re[np.isinf(re)] = 0.0
return re
ufname = 'nn_emissivity_u_lobe_%.1f%s' % nu
unfname = ('flash', 'nn_emissivity_un_lobe_%.1f%s' % nu)
@derived_field(name=unfname, sampling_type='cell')
def _un_emissivity(field, data):
#re = np.nan_to_num(data[ufname])
re = data[ufname]
re[np.isinf(re)] = 0.0
return re
if type(proj_axis) is str:
postfix = ('_synchrotron_%%.1f%%s_%s' % proj_axis) % nu
elif type(proj_axis) is list:
postfix = ('_synchrotron_%%.1f%%s_%.1f_%.1f_%.1f' % tuple(proj_axis)) % nu
dir = '/home/ychen/d9/FLASH4/2015_production_runs/0529_L45_M10_b1_h1'
fname = dir + '/MHD_Jet_hdf5_plt_cnt_0630' + postfix
ds = yt.load(fname)
ptype = 'lobe'
norm = yt.YTQuantity(*nu).in_units('GHz').value**0.5
fields = []
for pol in ['i', 'qn', 'un']:
field = ('flash', ('nn_emissivity_%s_%s_%%.1f%%s' % (pol, ptype)) % nu)
fields.append(field)
north_vector = [0,0,1]
if proj_axis == 'x':
prj[nu] = yt.ProjectionPlot(ds, proj_axis, fields, width=(80, 'kpc'))
else:
prj[nu] = yt.OffAxisProjectionPlot(ds, proj_axis, fields,width=(60, 'kpc'),
north_vector=north_vector)
frb_I[nu] = prj[nu].frb.data[fields[0]].v
frb_Q[nu] = prj[nu].frb.data[fields[1]].v
frb_U[nu] = prj[nu].frb.data[fields[2]].v
In [ ]:
-
In [ ]:
# Binning
for nu in nus:
factor = 1
nx = 800//factor
ny = 800//factor
I_bin[nu] = frb_I[nu].reshape(nx, factor, ny, factor).sum(3).sum(1)
Q_bin[nu] = frb_Q[nu].reshape(nx, factor, ny, factor).sum(3).sum(1)
U_bin[nu] = frb_U[nu].reshape(nx, factor, ny, factor).sum(3).sum(1)
psi[nu] = 0.5*np.arctan2(U_bin[nu], Q_bin[nu])
frac[nu] = np.sqrt(Q_bin[nu]**2+U_bin[nu]**2)/I_bin[nu]
In [ ]:
fig = plt.figure(figsize=(16,4))
ax1 = fig.add_subplot(131)
ax2 = fig.add_subplot(132)
ax3 = fig.add_subplot(133)
for nu in reversed(nus):
nu_str = '%.0f%s' % nu
fig = plot_polarization_histogram(frac[nu], psi[nu], I_bin[nu], fig=fig, label=nu_str)
In [ ]:
ns, bins = {}, {}
for nu in nus:
frac_nu = frac[nu]
ns[nu], bins[nu], patches = plt.hist(frac_nu[frac_nu.nonzero()]*100, range=(0,80), bins=40, \
weights=I_bin[nu][frac_nu.nonzero()], normed=True)
plt.cla()
plt.scatter((bins[nu0][1:]+bins[nu0][:-1])/2, (ns[nu0]-ns[nu1])/(ns[nu0]+ns[nu1]))
plt.hlines(0, 0, 80, linestyle=':')
plt.ylim(-0.3,1)
In [ ]:
fig = plt.figure(figsize=(20,8))
ax1 = fig.add_subplot(121)
ax1.imshow(frac[nu0], vmin=0, vmax=0.7)
plt.title(nus_str[0])
ax2 = fig.add_subplot(122)
img2 = ax2.imshow(frac[nu1], vmin=0, vmax=0.7)
plt.title(nus_str[1])
cb = plt.colorbar(img2, pad=0)
cb.set_label('polarization fraction')
In [ ]:
fig = plt.figure(figsize=(10,8))
ax = fig.add_subplot(111)
img = ax.imshow((frac[nu0]-frac[nu1]), cmap='seismic', vmin=-0.5, vmax=0.5)
cb = plt.colorbar(img, pad=0)
cb.set_label('polarization fraction difference (%s - %s)' % tuple(nus_str))
In [ ]:
fig = plt.figure(figsize=(22,8))
ax1 = fig.add_subplot(121)
ax1.imshow(psi[nu0], vmin=0, vmax=np.pi/2)
plt.title(nus_str[0])
ax2 = fig.add_subplot(122)
img2 = ax2.imshow(psi[nu1], vmin=0, vmax=np.pi/2)
plt.title(nus_str[1])
cb = plt.colorbar(img2)
cb.set_label('polarization angle')
In [ ]:
fig = plt.figure(figsize=(10,8))
ax = fig.add_subplot(111)
img = plt.imshow((psi[nu0]-psi[nu1]), cmap='seismic', vmin=-1.5, vmax=1.5)
cb = plt.colorbar(img, pad=0)
cb.set_label('polarization angle difference (%s - %s)' % tuple(nus_str))
In [ ]:
#frb_I = proj.frb.data[fields[0]].v
#frb_Q = proj.frb.data[fields[1]].v
#frb_U = proj.frb.data[fields[2]].v
#proj.annotate_polline(frb_I, frb_Q, frb_U, factor=16)
#proj.show()