[171109 - AMS] Created notebook
This notebook re-creates Fig 1 from Brentjens & de Bruyn (2005)
In [1]:
# this embeds plots in the notebook
%matplotlib inline
In [2]:
import numpy as np # for arrays
import pylab as pl # for plotting
Make a function for the Galactic foreground:
$$ F_{\rm gal}(\phi) = (2\phi_{\rm fg})^{-1}~~~~-\phi_{\rm fg} \lt \phi \lt \phi_{\rm fg} $$and zero elsewhere. Therefore:
$$ P_{\rm gal}(\lambda^2) = \frac{\sin (2\phi_{\rm fg} \lambda^2)}{2\phi_{\rm fg}\lambda^2} $$Make an array of $\lambda^2$ values:
In [3]:
lam_sq = np.arange(0.01,1,0.01)
We're going to specify that $\phi_{\rm fg}= 2\,{\rm rad\,m^{-2}}$. We can then compute the Galactic contribution at each value of $\lambda^2$:
In [4]:
phi_fg = 2.
P_gal = np.sin(2*phi_fg*lam_sq)/(2*phi_fg*lam_sq) + 0*1j
Now make a function for the radio galaxy lobe:
$$ F_{\rm rg}(\phi) = 0.25\delta(\phi - \phi_1) $$therefore:
$$ P_{\rm rg}(\lambda^2) = 0.25 \exp (2i\phi_1 \lambda^2) $$which is equivalent to:
$$ P_{\rm rg}(\lambda^2) = 0.25 \cos (2\phi_1 \lambda^2) + 0.25 i \sin (2\phi_1 \lambda^2) $$so,
$$ Q_{\rm rg}(\lambda^2) = 0.25 \cos (2\phi_1 \lambda^2) $$and
$$ U_{\rm rg}(\lambda^2) = 0.25 \sin (2\phi_1 \lambda^2) $$We're going to specify that $\phi_1= 10\,{\rm rad\,m^{-2}}$. We can then compute the contribution from the radio galaxy lobe at each value of $\lambda^2$:
In [5]:
phi_1 = 10.
P_rg = 0.25*np.cos(2*phi_1*lam_sq) + 1j*0.25*np.sin(2*phi_1*lam_sq)
The total polarized signal will be the sum of the radio galaxy contribution and the Galactic contribution:
In [6]:
P_tot = P_gal + P_rg
Now let's re-create Fig. 1 from Brentjens & de Bruyn (2005; https://arxiv.org/pdf/astro-ph/0507349.pdf)
First let's plot $Q_{\rm gal}$ (called $Q_{\rm fg}$ in the paper):
In [7]:
pl.subplot(111)
pl.plot(lam_sq,P_gal.real,ls='--')
pl.xlabel(r"$\lambda^2$ [m$^2$]")
pl.ylabel("Flux [Jy]")
pl.axis([0,1,-0.2,1.4])
pl.show()
Now let's plot on the magnitude of the total polarization as well:
In [8]:
pl.subplot(111)
pl.plot(lam_sq,P_gal.real,ls='--')
pl.plot(lam_sq,np.absolute(P_tot),ls=':')
pl.xlabel(r"$\lambda^2$ [m$^2$]")
pl.ylabel("Flux [Jy]")
pl.axis([0,1,-0.2,1.4])
pl.show()
Now let's calculate the polarization angle:
$$ \chi = 0.5\tan^{-1}\left(\frac{U}{Q}\right) $$where $U$ is the imaginary part of the complex polarization, $P$, and $Q$ is the real part.
In [9]:
chi = 0.5*np.arctan2(P_tot.imag,P_tot.real)
chi*= (180./np.pi) # convert radians to degrees
# hack to unwrap the arctangent [-pi/2,pi/2] wrap:
for i in range(1,len(chi)):
delta_chi = np.abs(chi[i]-chi[i-1])
if (delta_chi>45.):
chi[i:]+=180.
In [10]:
pl.subplot(111)
pl.plot(lam_sq,chi)
pl.xlabel(r"$\lambda^2$ [m$^2$]")
pl.ylabel(r"$\chi$ [deg]")
pl.axis([0,1,-50,350])
pl.show()
Now plot it all together:
In [12]:
fig, ax1 = pl.subplots()
ln1 = ax1.plot(lam_sq, chi, 'b-',label=r"$\chi$")
ax1.set_xlabel(r"$\lambda^2$ [m$^2$]")
ax1.set_ylabel(r"$\chi$ [deg]")
ax1.set_ylim(-50, 350)
ax2 = ax1.twinx()
ln2 = ax2.plot(lam_sq,np.absolute(P_tot),ls=':',label=r"$|P|$")
ln3 = ax2.plot(lam_sq,P_gal.real,ls='--',label=r"$Q_{\rm fg}$")
ax2.set_ylabel("Flux [Jy]")
ax2.set_ylim(-0.2, 1.4)
# figure legend:
lns = ln1+ln2+ln3
labs = [l.get_label() for l in lns]
ax2.legend(lns, labs, loc=1)
fig.tight_layout()
pl.savefig("Fig1.png")
pl.show()
In [ ]:
In [ ]: