Path: blob/main/latex-templates/templates/astronomy/pulsar_timing.tex
51 views
unlisted
\documentclass[a4paper, 11pt]{article}1\usepackage[utf8]{inputenc}2\usepackage[T1]{fontenc}3\usepackage{amsmath, amssymb}4\usepackage{graphicx}5\usepackage{siunitx}6\usepackage{booktabs}7\usepackage{subcaption}8\usepackage[makestderr]{pythontex}910% Theorem environments11\newtheorem{definition}{Definition}12\newtheorem{theorem}{Theorem}13\newtheorem{example}{Example}14\newtheorem{remark}{Remark}1516\title{Pulsar Timing: From Spin-down to Gravitational Wave Detection\\17\large A Comprehensive Analysis of Pulsar Astrophysics}18\author{High-Energy Astrophysics Division\\Computational Science Templates}19\date{\today}2021\begin{document}22\maketitle2324\begin{abstract}25This comprehensive analysis explores pulsar timing theory and applications, from basic spin-down physics to gravitational wave detection via pulsar timing arrays. We derive the fundamental pulsar equations including period derivatives, characteristic ages, and magnetic field strengths. The analysis covers the P-$\dot{P}$ diagram for pulsar classification, timing residuals analysis, binary pulsar systems, and the search for nanohertz gravitational waves. We examine synthetic pulsar populations representing normal pulsars, millisecond pulsars, and magnetars, and explore their evolutionary relationships.26\end{abstract}2728\section{Introduction}2930Pulsars are rapidly rotating, highly magnetized neutron stars that emit beams of electromagnetic radiation. Discovered in 1967 by Jocelyn Bell Burnell and Antony Hewish, pulsars have become invaluable tools for precision astrophysics, from testing general relativity to detecting gravitational waves.3132\begin{definition}[Pulsar]33A pulsar is a rotating neutron star with a dipolar magnetic field misaligned with its rotation axis. The lighthouse effect produces periodic pulses as the beam sweeps past Earth with each rotation.34\end{definition}3536\section{Theoretical Framework}3738\subsection{Spin-down Physics}3940Pulsars lose rotational energy through magnetic dipole radiation and particle winds:4142\begin{theorem}[Spin-down Luminosity]43The rate of rotational energy loss is:44\begin{equation}45\dot{E} = -\frac{d}{dt}\left(\frac{1}{2}I\Omega^2\right) = I\Omega\dot{\Omega} = \frac{4\pi^2 I \dot{P}}{P^3}46\end{equation}47where $I \approx 10^{45}$ g cm$^2$ is the neutron star moment of inertia, $P$ is the period, and $\dot{P}$ is the period derivative.48\end{theorem}4950\subsection{Characteristic Age}5152The characteristic age assumes constant braking index $n=3$ (pure magnetic dipole):5354\begin{equation}55\tau_c = \frac{P}{(n-1)\dot{P}} = \frac{P}{2\dot{P}}56\end{equation}5758\begin{remark}[Age Limitations]59The characteristic age equals the true age only if:60\begin{itemize}61\item Birth period $P_0 \ll P$ (current period)62\item Braking index $n = 3$ (magnetic dipole)63\item Magnetic field is constant64\end{itemize}65For young pulsars, $\tau_c$ often overestimates the true age.66\end{remark}6768\subsection{Magnetic Field Strength}6970Equating spin-down luminosity to magnetic dipole radiation:7172\begin{theorem}[Surface Magnetic Field]73The equatorial surface field strength is:74\begin{equation}75B = \sqrt{\frac{3c^3 I P\dot{P}}{8\pi^2 R^6 \sin^2\alpha}} \approx 3.2 \times 10^{19} \sqrt{P\dot{P}} \text{ G}76\end{equation}77where $R \approx 10$ km is the neutron star radius and $\alpha$ is the inclination angle.78\end{theorem}7980\subsection{Braking Index}8182The braking index describes the spin-down mechanism:83\begin{equation}84n = \frac{\Omega\ddot{\Omega}}{\dot{\Omega}^2} = 2 - \frac{P\ddot{P}}{\dot{P}^2}85\end{equation}8687\begin{itemize}88\item $n = 3$: Pure magnetic dipole radiation89\item $n = 1$: Particle wind dominated90\item $n = 5$: Gravitational wave emission91\end{itemize}9293\section{Computational Analysis}9495\begin{pycode}96import numpy as np97import matplotlib.pyplot as plt98from scipy import signal99plt.rc('text', usetex=True)100plt.rc('font', family='serif')101102np.random.seed(42)103104# Physical constants105c = 2.998e10 # cm/s106I = 1e45 # Moment of inertia (g cm^2)107R_ns = 1e6 # Neutron star radius (cm)108109# Generate synthetic pulsar population110# Normal pulsars (canonical)111n_normal = 200112P_normal = 10**np.random.uniform(-0.3, 1.0, n_normal) # 0.5 - 10 s113Pdot_normal = 10**np.random.uniform(-16, -13, n_normal)114115# Millisecond pulsars (recycled)116n_msp = 80117P_msp = 10**np.random.uniform(-2.5, -1.3, n_msp) # 3 - 50 ms118Pdot_msp = 10**np.random.uniform(-21, -18, n_msp)119120# Magnetars (Anomalous X-ray Pulsars / Soft Gamma Repeaters)121n_mag = 30122P_mag = 10**np.random.uniform(0.0, 1.1, n_mag) # 1 - 12 s123Pdot_mag = 10**np.random.uniform(-12, -10, n_mag)124125# Combine all populations126populations = {127'Normal': {'P': P_normal, 'Pdot': Pdot_normal, 'color': 'blue', 'marker': 'o', 'size': 8},128'MSP': {'P': P_msp, 'Pdot': Pdot_msp, 'color': 'red', 'marker': 's', 'size': 8},129'Magnetar': {'P': P_mag, 'Pdot': Pdot_mag, 'color': 'purple', 'marker': '^', 'size': 12}130}131132# Calculate derived quantities for all pulsars133all_P = np.concatenate([P_normal, P_msp, P_mag])134all_Pdot = np.concatenate([Pdot_normal, Pdot_msp, Pdot_mag])135all_tau = all_P / (2 * all_Pdot) / 3.154e7 / 1e6 # Myr136all_B = 3.2e19 * np.sqrt(all_P * all_Pdot) # Gauss137all_Edot = 4 * np.pi**2 * I * all_Pdot / all_P**3 # erg/s138139# Famous pulsars for reference140famous_pulsars = {141'Crab (B0531+21)': {'P': 0.0334, 'Pdot': 4.21e-13},142'Vela (B0833-45)': {'P': 0.0893, 'Pdot': 1.25e-13},143'PSR B1937+21': {'P': 0.00156, 'Pdot': 1.05e-19},144'PSR B1913+16': {'P': 0.0590, 'Pdot': 8.63e-18},145'SGR 1806-20': {'P': 7.55, 'Pdot': 8.3e-11}146}147148# Calculate properties for famous pulsars149for name, props in famous_pulsars.items():150props['tau'] = props['P'] / (2 * props['Pdot']) / 3.154e7151props['B'] = 3.2e19 * np.sqrt(props['P'] * props['Pdot'])152props['Edot'] = 4 * np.pi**2 * I * props['Pdot'] / props['P']**3153154# Generate timing residuals155def generate_timing_residuals(n_epochs, rms_noise, has_gw=False):156"""Generate synthetic timing residuals"""157t = np.linspace(0, 10, n_epochs) # years158residuals = np.random.normal(0, rms_noise, n_epochs)159160if has_gw:161# Add GW-induced correlation (simplified red noise)162gw_signal = 100e-9 * np.sin(2*np.pi*t/5) # 5-year period163residuals += gw_signal164165return t, residuals166167# Pulsar timing array (PTA) concept168n_pta_pulsars = 20169pta_rms = np.random.uniform(50, 500, n_pta_pulsars) # ns170171# Create comprehensive figure172fig = plt.figure(figsize=(14, 16))173174# Plot 1: P-Pdot diagram175ax1 = fig.add_subplot(3, 3, 1)176for name, pop in populations.items():177ax1.scatter(pop['P'], pop['Pdot'], c=pop['color'], s=pop['size'],178alpha=0.5, marker=pop['marker'], label=name)179180# Add famous pulsars181for name, props in famous_pulsars.items():182ax1.plot(props['P'], props['Pdot'], 'k*', markersize=10)183184# Add constant age lines185P_line = np.logspace(-3, 1.5, 100)186for age_yr, style in [(1e3, '--'), (1e6, '-'), (1e9, ':')]:187Pdot_line = P_line / (2 * age_yr * 3.154e7)188label_age = f'{age_yr/1e6:.0f} Myr' if age_yr >= 1e6 else f'{age_yr/1e3:.0f} kyr'189ax1.loglog(P_line, Pdot_line, 'g', alpha=0.4, linewidth=1, linestyle=style)190191# Add constant B lines192for B_val in [1e10, 1e12, 1e14]:193Pdot_B = (B_val / 3.2e19)**2 / P_line194ax1.loglog(P_line, Pdot_B, 'orange', alpha=0.4, linewidth=1, linestyle=':')195196# Death line197P_death = np.logspace(-3, 1, 100)198Pdot_death = (P_death / 0.17)**2 * 1e-16199ax1.loglog(P_death, Pdot_death, 'k--', alpha=0.7, linewidth=2, label='Death Line')200201ax1.set_xlabel('Period (s)')202ax1.set_ylabel('Period Derivative (s/s)')203ax1.set_title('Pulsar P-$\\dot{P}$ Diagram')204ax1.legend(fontsize=7, loc='lower right')205ax1.set_xlim([1e-3, 20])206ax1.set_ylim([1e-22, 1e-9])207ax1.grid(True, alpha=0.3)208209# Plot 2: Period histogram by population210ax2 = fig.add_subplot(3, 3, 2)211bins = np.linspace(-3, 1.5, 30)212for name, pop in populations.items():213ax2.hist(np.log10(pop['P']), bins=bins, alpha=0.6, label=name, color=pop['color'])214ax2.set_xlabel('$\\log_{10}(P$/s)')215ax2.set_ylabel('Count')216ax2.set_title('Period Distribution')217ax2.legend(fontsize=8)218ax2.grid(True, alpha=0.3)219220# Plot 3: Magnetic field distribution221ax3 = fig.add_subplot(3, 3, 3)222ax3.hist(np.log10(all_B), bins=30, alpha=0.7, color='green', edgecolor='black')223ax3.axvline(x=8, color='r', linestyle='--', alpha=0.7, label='MSP')224ax3.axvline(x=12, color='b', linestyle='--', alpha=0.7, label='Normal')225ax3.axvline(x=15, color='purple', linestyle='--', alpha=0.7, label='Magnetar')226ax3.set_xlabel('$\\log_{10}(B$/G)')227ax3.set_ylabel('Count')228ax3.set_title('Magnetic Field Distribution')229ax3.legend(fontsize=7)230ax3.grid(True, alpha=0.3)231232# Plot 4: Spin-down luminosity vs age233ax4 = fig.add_subplot(3, 3, 4)234for name, pop in populations.items():235tau_i = pop['P'] / (2 * pop['Pdot']) / 3.154e7 / 1e6 # Myr236Edot_i = 4 * np.pi**2 * I * pop['Pdot'] / pop['P']**3237ax4.scatter(tau_i, Edot_i, c=pop['color'], s=pop['size'],238alpha=0.5, marker=pop['marker'], label=name)239ax4.set_xscale('log')240ax4.set_yscale('log')241ax4.set_xlabel('Characteristic Age (Myr)')242ax4.set_ylabel('$\\dot{E}$ (erg/s)')243ax4.set_title('Spin-down Luminosity Evolution')244ax4.legend(fontsize=7)245ax4.grid(True, alpha=0.3)246247# Plot 5: Timing residuals example248ax5 = fig.add_subplot(3, 3, 5)249t_res, residuals = generate_timing_residuals(100, 100e-9, has_gw=False)250ax5.errorbar(t_res, residuals*1e6, yerr=100e-3, fmt='b.', capsize=2, alpha=0.7)251ax5.axhline(y=0, color='r', linestyle='-', alpha=0.5)252ax5.set_xlabel('Time (years)')253ax5.set_ylabel('Residual ($\\mu$s)')254ax5.set_title('Timing Residuals (MSP)')255ax5.grid(True, alpha=0.3)256257# Plot 6: PTA sensitivity curve258ax6 = fig.add_subplot(3, 3, 6)259f_gw = np.logspace(-9, -7, 100) # Hz260# Characteristic strain sensitivity (simplified)261h_c = 1e-14 * (f_gw / 1e-8)**(-2/3) # nHz regime262ax6.loglog(f_gw * 1e9, h_c, 'b-', linewidth=2, label='PTA Sensitivity')263ax6.fill_between(f_gw * 1e9, h_c, 1e-10, alpha=0.3)264# SMBHB background265h_gw = 2e-15 * (f_gw / 1e-8)**(-2/3)266ax6.loglog(f_gw * 1e9, h_gw, 'r--', linewidth=2, label='SMBHB Background')267ax6.set_xlabel('Frequency (nHz)')268ax6.set_ylabel('Characteristic Strain $h_c$')269ax6.set_title('PTA GW Sensitivity')270ax6.legend(fontsize=8)271ax6.grid(True, alpha=0.3)272ax6.set_xlim([1, 100])273274# Plot 7: Binary pulsar orbital decay275ax7 = fig.add_subplot(3, 3, 7)276# PSR B1913+16 orbital decay277T_orbit = 7.75 # hours278Pb_dot_obs = -2.423e-12 # s/s (observed)279Pb_dot_gr = -2.403e-12 # s/s (GR prediction)280281years = np.linspace(1974, 2024, 100)282cumulative_shift = (years - 1974) * Pb_dot_obs * 3.154e7 / T_orbit / 3600 # orbits283284ax7.plot(years, -cumulative_shift, 'b-', linewidth=2, label='GR Prediction')285# Add data points286obs_years = np.array([1975, 1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2020])287obs_shift = (obs_years - 1974) * Pb_dot_obs * 3.154e7 / T_orbit / 3600288ax7.plot(obs_years, -obs_shift + np.random.normal(0, 0.1, len(obs_years)),289'ro', markersize=6, label='Observations')290ax7.set_xlabel('Year')291ax7.set_ylabel('Cumulative Periastron Shift (s)')292ax7.set_title('PSR B1913+16 Orbital Decay')293ax7.legend(fontsize=8)294ax7.grid(True, alpha=0.3)295296# Plot 8: Glitch behavior297ax8 = fig.add_subplot(3, 3, 8)298t_glitch = np.linspace(0, 100, 1000) # days299nu_0 = 30.0 # Hz (spin frequency)300nu_dot = -3.7e-10 # Hz/s (spin-down)301302nu = nu_0 + nu_dot * t_glitch * 86400303# Add glitch at day 50304glitch_time = 50305glitch_idx = np.argmin(np.abs(t_glitch - glitch_time))306delta_nu = 1e-6 # Hz (glitch amplitude)307nu[glitch_idx:] += delta_nu308309# Recovery310tau_d = 5 # days (recovery timescale)311recovery = delta_nu * 0.1 * (1 - np.exp(-(t_glitch[glitch_idx:] - glitch_time)/tau_d))312nu[glitch_idx:] -= recovery313314ax8.plot(t_glitch, (nu - nu_0)*1e6, 'b-', linewidth=1.5)315ax8.axvline(x=glitch_time, color='r', linestyle='--', alpha=0.7, label='Glitch')316ax8.set_xlabel('Time (days)')317ax8.set_ylabel('$\\Delta\\nu$ ($\\mu$Hz)')318ax8.set_title('Pulsar Glitch Event')319ax8.legend(fontsize=8)320ax8.grid(True, alpha=0.3)321322# Plot 9: Dispersion measure effect323ax9 = fig.add_subplot(3, 3, 9)324freq = np.linspace(0.3, 3, 100) # GHz325DM = 50 # pc/cm^3326delay = 4.149 * DM / freq**2 # ms327328ax9.plot(freq, delay, 'b-', linewidth=2)329ax9.set_xlabel('Frequency (GHz)')330ax9.set_ylabel('Dispersion Delay (ms)')331ax9.set_title(f'Dispersion (DM = {DM} pc/cm$^3$)')332ax9.grid(True, alpha=0.3)333334plt.tight_layout()335plt.savefig('pulsar_timing_plot.pdf', bbox_inches='tight', dpi=150)336print(r'\begin{center}')337print(r'\includegraphics[width=\textwidth]{pulsar_timing_plot.pdf}')338print(r'\end{center}')339plt.close()340341# Reference pulsar: Crab342crab = famous_pulsars['Crab (B0531+21)']343\end{pycode}344345\section{Results and Analysis}346347\subsection{Pulsar Population Statistics}348349\begin{pycode}350# Generate population statistics table351print(r'\begin{table}[h]')352print(r'\centering')353print(r'\caption{Pulsar Population Statistics}')354print(r'\begin{tabular}{lcccc}')355print(r'\toprule')356print(r'Population & Count & $\langle P \rangle$ (s) & $\langle B \rangle$ (G) & $\langle \tau_c \rangle$ (Myr) \\')357print(r'\midrule')358for name, pop in populations.items():359P = pop['P']360tau_i = P / (2 * pop['Pdot']) / 3.154e7 / 1e6361B_i = 3.2e19 * np.sqrt(P * pop['Pdot'])362print(f"{name} & {len(P)} & {np.median(P):.3f} & {np.median(B_i):.2e} & {np.median(tau_i):.1f} \\\\")363print(r'\bottomrule')364print(r'\end{tabular}')365print(r'\end{table}')366\end{pycode}367368\subsection{Famous Pulsars}369370\begin{pycode}371# Famous pulsars table372print(r'\begin{table}[h]')373print(r'\centering')374print(r'\caption{Properties of Notable Pulsars}')375print(r'\begin{tabular}{lcccc}')376print(r'\toprule')377print(r'Pulsar & $P$ (ms) & $\dot{P}$ (s/s) & $B$ (G) & $\tau_c$ (yr) \\')378print(r'\midrule')379for name, props in famous_pulsars.items():380print(f"{name} & {props['P']*1000:.2f} & {props['Pdot']:.2e} & {props['B']:.2e} & {props['tau']:.0f} \\\\")381print(r'\bottomrule')382print(r'\end{tabular}')383print(r'\end{table}')384\end{pycode}385386\begin{example}[The Crab Pulsar]387The Crab pulsar (PSR B0531+21) is a young pulsar in the Crab Nebula supernova remnant:388\begin{itemize}389\item Period: $P = $ \py{f"{crab['P']*1000:.1f}"} ms390\item Period derivative: $\dot{P} = $ \py{f"{crab['Pdot']:.2e}"} s/s391\item Characteristic age: $\tau_c = $ \py{f"{crab['tau']:.0f}"} years392\item True age (SN 1054): 970 years393\item Surface magnetic field: $B = $ \py{f"{crab['B']:.2e}"} G394\item Spin-down luminosity: $\dot{E} = $ \py{f"{crab['Edot']:.2e}"} erg/s395\end{itemize}396\end{example}397398\section{Pulsar Evolution}399400\subsection{Evolutionary Tracks}401402Pulsars evolve through the P-$\dot{P}$ diagram:403\begin{enumerate}404\item \textbf{Birth}: Upper left, short period, high $\dot{P}$405\item \textbf{Spin-down}: Move right as period increases406\item \textbf{Death line}: Stop emitting when $B/P^2$ drops below threshold407\item \textbf{Recycling}: Binary accretion spins up to MSP phase408\end{enumerate}409410\subsection{Millisecond Pulsar Formation}411412\begin{remark}[Recycling Scenario]413MSPs are ``recycled'' pulsars:414\begin{itemize}415\item Originally normal pulsars in binary systems416\item Accretion from companion spins them up417\item Magnetic field buried by accreted material418\item Final state: $P \sim 1-10$ ms, $B \sim 10^8-10^9$ G419\end{itemize}420\end{remark}421422\section{Pulsar Timing Arrays}423424\subsection{Gravitational Wave Detection}425426Pulsar timing arrays use the correlated timing residuals of many MSPs to detect low-frequency gravitational waves:427428\begin{definition}[Hellings-Downs Curve]429The angular correlation of timing residuals between pulsar pairs due to a stochastic GW background:430\begin{equation}431\Gamma(\theta) = \frac{3}{2}x\ln x - \frac{x}{4} + \frac{1}{2} + \frac{1}{2}\delta_{12}432\end{equation}433where $x = (1 - \cos\theta)/2$ and $\theta$ is the angular separation.434\end{definition}435436\subsection{Sources in PTA Band}437438\begin{itemize}439\item Supermassive black hole binaries (SMBHB)440\item Cosmic strings441\item Primordial gravitational waves442\item Individual continuous sources443\end{itemize}444445\section{Binary Pulsars}446447\subsection{Tests of General Relativity}448449Binary pulsars provide precision tests of GR through post-Keplerian parameters:450\begin{itemize}451\item Periastron advance: $\dot{\omega}$452\item Gravitational redshift: $\gamma$453\item Orbital decay: $\dot{P}_b$454\item Shapiro delay: $r$, $s$455\end{itemize}456457\begin{remark}[Hulse-Taylor Pulsar]458PSR B1913+16 provided the first indirect evidence for gravitational waves through its orbital decay, matching GR predictions to 0.3\%.459\end{remark}460461\section{Timing Phenomena}462463\subsection{Glitches}464465Sudden spin-up events caused by transfer of angular momentum from the superfluid interior:466\begin{equation}467\frac{\Delta\nu}{\nu} \sim 10^{-9} - 10^{-6}468\end{equation}469470\subsection{Dispersion}471472Interstellar plasma delays lower frequencies:473\begin{equation}474\Delta t = 4.149 \times 10^3 \cdot \text{DM} \cdot \left(\frac{1}{\nu_1^2} - \frac{1}{\nu_2^2}\right) \text{ s}475\end{equation}476where DM is the dispersion measure in pc cm$^{-3}$ and $\nu$ is in MHz.477478\section{Limitations and Extensions}479480\subsection{Model Limitations}481\begin{enumerate}482\item \textbf{Vacuum dipole}: Real magnetospheres are plasma-filled483\item \textbf{Constant B}: Field may decay over time484\item \textbf{Point dipole}: Higher multipoles exist485\item \textbf{Rigid rotation}: Differential rotation possible486\end{enumerate}487488\subsection{Possible Extensions}489\begin{itemize}490\item Full magnetosphere models (force-free, MHD)491\item Timing noise characterization492\item Pulsar wind nebula evolution493\item Equation of state constraints from masses494\end{itemize}495496\section{Conclusion}497498This analysis demonstrates the rich physics of pulsar timing:499\begin{itemize}500\item P-$\dot{P}$ diagram reveals distinct populations and evolution501\item Characteristic ages provide evolutionary timescales502\item MSPs are precision clocks with $\sigma_\text{rms} \lesssim 100$ ns503\item PTAs are sensitive to nanohertz gravitational waves504\item Binary pulsars test GR with unprecedented precision505\end{itemize}506507\section*{Further Reading}508\begin{itemize}509\item Lorimer, D. R. \& Kramer, M. (2012). \textit{Handbook of Pulsar Astronomy}. Cambridge University Press.510\item Manchester, R. N. et al. (2005). The Australia Telescope National Facility Pulsar Catalogue. \textit{AJ}, 129, 1993.511\item Hobbs, G. \& Dai, S. (2017). A review of pulsar timing array gravitational wave research. \textit{National Science Review}, 4, 707.512\end{itemize}513514\end{document}515516517