Compare Recomposed Waveforms from Spherical and Spheroidal Perspectives


In [26]:
# Setup ipython environment
%load_ext autoreload
%autoreload 2
%matplotlib inline
# The Important Things
from nrutils import scsearch,gwylm
from matplotlib.pyplot import *
from kerr.models import mmrdns 
from numpy import array
# Setup plotting backend
import matplotlib as mpl
mpl.rcParams['lines.linewidth'] = 0.8
mpl.rcParams['font.family'] = 'serif'
mpl.rcParams['font.size'] = 12
mpl.rcParams['axes.labelsize'] = 20
mpl.rcParams['text.usetex'] = not True


The autoreload extension is already loaded. To reload it, use:
  %reload_ext autoreload

Find a Simulation


In [28]:
A = scsearch(keyword=['gatech','hrq'],q=1.0,verbose=True)


[scsearch]>> Found keyword (=['gatech', 'hrq']) keyword.
[scsearch]>> Found q (=1.0) keyword.
[scsearch]>> Found verbose (=True) keyword.
(scsearch)>> List of keywords or string keyword found: ALL scentry objects matching will be passed. To pass ANY entries matching the keywords, input the keywords using an iterable of not of type list.
## Found 1 possibly degenerate simulations:
[0001][numrel-hrqseries] D9_q1.0_a0.0_m160: ns-q1.00

Load waveform data for this simulation


In [30]:
# Here we load only the l=m=2 spherical multipole moment
y = gwylm( A[0], lm=[2,2], verbose=True )


(gwylm)>> Found clean (=False) keyword.
(gwylm)>> Found lm (=[2, 2]) keyword.
(gwylm)>> Found load (=True) keyword.
(gwylm)>> Found scentry_obj (=<nrutils.core.nrsc.scentry instance at 0x103a11b90>) keyword.
(gwylm)>> Found verbose (=True) keyword.
(load)>> Loading: mp_WeylScal4::Psi4i_l2_m2_r75.00.asc
(load)>> Re-orienting waveform phase to be consistent with internal sign convention for Psi4, where sign(dPhi/dt)=1*sign(m). Note that the internal sign convention is defined in ... nrutils/core/__init__.py as "M_RELATIVE_SIGN_CONVENTION". This message has appeared becuase the waveform is determioned to obey and sign convention: sign(dPhi/dt)=-1*sign(m).
(gwylm)>> Using w22 from a PN estimate to calculate strain multipoles [see pnw0 in basics.py, and/or arxiv:1310.1528v4].
* w0(w22) = 0.058092 (this is the lower frequency used for FFI method [arxiv:1006.1632v3])
(gwylm.calchlm)>> The user should note that there is no minus sign used in front of the double time integral for strain (i.e. Eq 4 of arxiv:1006.1632). This differs from Eq 3.4 of arxiv:0707.4654v3. The net effect is a rotation of the overall polarization of pi degrees. The user should also note that there is no minus sign applied to h_cross meaning that the user must be mindful to write h_pluss-1j*h_cross when appropriate.

In [31]:
# Plot the strain waveform
y.hlm[0].plot(show=True);


<matplotlib.figure.Figure at 0x10af1aa10>

We are interested in ringdown


In [32]:
g = y.ringdown(T0=10,T1=30) # Here, T0 is where we will define ringdown to start in terms of M after the peak luminosity; in the same sense, T1 is where the waveform will terminate


* w0(w22) = 0.058092 (this is the lower frequency used for FFI method [arxiv:1006.1632v3])
(gwylm.calcflm!)>> flm, the first integral of Psi4, will not be calculated because it has already been calculated for the current object

In [33]:
# Plot the strain and psi4 waveforms. NOTE that Ringdown in strain is of lower quality 
g.plot()


Out[33]:
[<matplotlib.axes._subplots.AxesSubplot at 0x107da8890>,
 <matplotlib.axes._subplots.AxesSubplot at 0x1075e53d0>,
 <matplotlib.axes._subplots.AxesSubplot at 0x1091dd810>]
<matplotlib.figure.Figure at 0x10bc00f50>

In [34]:
eta = mmrdns.q2eta(A[0].m1/A[0].m2)
theta,phi=0,0
a = mmrdns.meval(theta,phi,eta,kind='strain',gwfout=True)(g.hlm[0].t)
b = mmrdns.meval(theta,phi,eta,kind='strain',gwfout=True,spherical=True)(g.hlm[0].t)

In [35]:
a.plot()
b.plot()


Out[35]:
([<matplotlib.axes._subplots.AxesSubplot at 0x111cb7a50>,
  <matplotlib.axes._subplots.AxesSubplot at 0x107d95c10>,
  <matplotlib.axes._subplots.AxesSubplot at 0x10b06c290>],
 <matplotlib.figure.Figure at 0x10b6037d0>)

Plot and compare the Strain Waveforms from the two different perspectives


In [51]:
mpl.rcParams['text.usetex'] = not True
figure( figsize=2*array([5,3]) )
# gca().set_yscale("log", nonposy='clip')
# ylim( [0, 0.25] )
# xlim( [min(hk.t),max(hk.t)] )
plot( a.t, a.amp, label=r'MMRDNS: Spheroidal' )
plot( b.t, b.amp, '--g', label=r'MMRDNS: Spherical' )

#
xlabel(r'$(t-t_{PeakLum.})/M$')
ylabel(r'$\frac{r}{M}\,|h(t,\theta=0,\phi=0)|$')
title(g.label.upper()+'  Face-On')
legend(frameon=False)

#
savefig('mmrdns_spherical_spheroical_comparison_%s_ll%imm%i.pdf'%(g.label.replace('-','_'),ll,mm))



In [ ]: