Skip to content

Instantly share code, notes, and snippets.

@avivajpeyi
Last active August 25, 2025 06:24
Show Gist options
  • Select an option

  • Save avivajpeyi/a4df641a4dc9752e3dee2be0fc6774a9 to your computer and use it in GitHub Desktop.

Select an option

Save avivajpeyi/a4df641a4dc9752e3dee2be0fc6774a9 to your computer and use it in GitHub Desktop.
psd_comparison.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": [],
"authorship_tag": "ABX9TyNi8GHsKTBA19rbfOLzTj+2",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/avivajpeyi/a4df641a4dc9752e3dee2be0fc6774a9/psd_comparison.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"source": [
"# PSD comparisons\n",
"\n",
"https://github.com/NirGutt/tPowerBilby/blob/main/tPowerBilby/Utils/PostProcessingtPowerBilby.py#L202C1-L215C25\n",
"\n",
"https://github.com/NirGutt/tPowerBilby/blob/268548c670939314b7fab81a316aeb145811a5b9/tPowerBilby/Utils/asd_data_manipulations.py#L241"
],
"metadata": {
"id": "vKv1BNLmGG75"
}
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "bdX46NZzoEI4",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "ec5a55aa-7ad5-4eed-d57b-1cf07c7b9cac"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.3/2.3 MB\u001b[0m \u001b[31m30.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.4/1.4 MB\u001b[0m \u001b[31m57.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.0/1.0 MB\u001b[0m \u001b[31m31.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m315.5/315.5 kB\u001b[0m \u001b[31m20.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m108.2/108.2 kB\u001b[0m \u001b[31m7.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m43.8/43.8 kB\u001b[0m \u001b[31m2.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m131.1/131.1 kB\u001b[0m \u001b[31m9.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m47.4/47.4 kB\u001b[0m \u001b[31m2.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.5/4.5 MB\u001b[0m \u001b[31m113.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[?25h\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n",
"pyopenssl 24.2.1 requires cryptography<44,>=41.0.5, but you have cryptography 45.0.6 which is incompatible.\n",
"pydrive2 1.21.3 requires cryptography<44, but you have cryptography 45.0.6 which is incompatible.\u001b[0m\u001b[31m\n",
"\u001b[0m"
]
}
],
"source": [
"! pip install bilby gwpy -q"
]
},
{
"cell_type": "code",
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import bilby\n",
"from gwosc.datasets import event_gps\n",
"from gwpy.timeseries import TimeSeries\n",
"import h5py\n",
"from scipy.stats import anderson, kstest, norm\n",
"import os\n",
"import h5py\n",
"import urllib.request\n",
"\n",
"\n",
"\n",
"def get_GW_data_asd_welch(psd_end_time, det='L1', duration=4, f_i=20, f_f=896, method='welch', n_step_back=32, roll_off=0.4):\n",
" psd_duration = n_step_back * duration\n",
" psd_start_time = psd_end_time - psd_duration\n",
" psd_data = TimeSeries.fetch_open_data(det, psd_start_time, psd_end_time)\n",
"\n",
" psd_alpha = 2 * roll_off / duration\n",
" psd = psd_data.psd(\n",
" fftlength=duration, window=(\"tukey\", psd_alpha), method=method\n",
" )\n",
"\n",
" freqs = psd.frequencies.value\n",
" vals = np.sqrt(psd.value)\n",
" I = (freqs >= f_i) & (freqs <= f_f)\n",
" return freqs[I], vals[I]\n",
"\n",
"\n",
"def get_GW_data(psd_end_time, psd_duration=4, det='H1', f_i=20, f_f=896, roll_off=0.2, return_raw_data=False):\n",
" psd_start_time = psd_end_time - psd_duration\n",
" psd_data = TimeSeries.fetch_open_data(det, psd_start_time, psd_end_time)\n",
" ifo = bilby.gw.detector.get_empty_interferometer(det)\n",
" ifo.strain_data.roll_off = roll_off\n",
" ifo.maximum_frequency = f_f\n",
" ifo.minimum_frequency = f_i\n",
" ifo.strain_data.set_from_gwpy_timeseries(psd_data)\n",
"\n",
" x = ifo.strain_data.frequency_array\n",
" y = ifo.strain_data.frequency_domain_strain\n",
" Ew = np.sqrt(ifo.strain_data.window_factor)\n",
"\n",
" I = (x >= f_i) & (x <= f_f)\n",
" if return_raw_data:\n",
" return x[I], y[I] / Ew\n",
" return x[I], np.abs(y[I]) / Ew\n",
"\n",
"\n",
"\n",
"def get_GWTC_psd(url,event_name, det='H1', f_i=20, f_f=896):\n",
" # Download if not already present\n",
" local_path=f'GWTC_{event_name}.h5'\n",
" if not os.path.exists(local_path):\n",
" print(f\"Downloading {url} to {local_path} ...\")\n",
" urllib.request.urlretrieve(url, local_path)\n",
" print(\"Download complete.\")\n",
"\n",
" # Open the HDF5 file\n",
" ret_dict = {}\n",
" with h5py.File(local_path, 'r') as f:\n",
" psd_data = f['C01:IMRPhenomXPHM']['psds']\n",
" for ifo_name in list(psd_data):\n",
" freqs = psd_data[ifo_name][:, 0]\n",
" vals = psd_data[ifo_name][:, 1]\n",
" I = (freqs >= f_i) & (freqs <= f_f)\n",
" ret_dict[ifo_name] = (freqs[I], np.sqrt(vals[I]))\n",
"\n",
" return ret_dict\n",
"\n",
"\n",
"def get_pval(x_data, y_data, x_psd, y_psd):\n",
" # Keep only the data points where the frequencies exactly match\n",
" I_keep = np.isin(x_data, x_psd)\n",
"\n",
" # Make sure the PSD values are aligned\n",
" common_freqs = x_data[I_keep]\n",
" y_psd_matched = y_psd[np.isin(x_psd, common_freqs)]\n",
"\n",
" # Compute the normalized ratio\n",
" ratio_real = np.real(y_data[I_keep] / y_psd_matched)\n",
" ratio_imag = np.imag(y_data[I_keep] / y_psd_matched)\n",
"\n",
" # Combine real and imaginary parts\n",
" ratio_combined = np.concatenate([ratio_real, ratio_imag])\n",
"\n",
" # Anderson-Darling and KS test\n",
" a2_stat = anderson(ratio_combined).statistic\n",
" pvalue = kstest(ratio_combined, norm.cdf).pvalue\n",
"\n",
" return pvalue\n",
"\n"
],
"metadata": {
"id": "JYB5sgfbozMc"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"## GW150914"
],
"metadata": {
"id": "mi_jSuk1B3_l"
}
},
{
"cell_type": "code",
"source": [
"event_name = 'GW150914'\n",
"psd_end_time = event_gps(event_name) - 3\n",
"\n",
"# # Fetch PSDs\n",
"x_data, y_data = get_GW_data(psd_end_time, f_i=20, f_f=896, return_raw_data=True)\n",
"x_welch, y_welch = get_GW_data_asd_welch(psd_end_time, det=\"H1\", duration=4, f_i=20, f_f=896, method='welch')\n",
"\n",
"# GWTC PSD\n",
"url = 'https://zenodo.org/records/6513631/files/IGWN-GWTC2p1-v2-GW150914_095045_PEDataRelease_mixed_cosmo.h5?download=1'\n",
"gwtc_psd = get_GWTC_psd(url, event_name, det='H1', f_i=20, f_f=896)\n",
"x_gwtc, y_gwtc = gwtc_psd['H1']"
],
"metadata": {
"id": "mQ-nT8tfB5m7",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "08bebc14-23b7-4203-9878-6c60b3928484"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Downloading https://zenodo.org/records/6513631/files/IGWN-GWTC2p1-v2-GW150914_095045_PEDataRelease_mixed_cosmo.h5?download=1 to GWTC_GW150914.h5 ...\n",
"Download complete.\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# Compute p-value\n",
"pval_welch = get_pval(x_data, y_data, x_welch, y_welch)\n",
"pval_gwtc = get_pval(x_data, y_data, x_gwtc, y_gwtc)\n",
"\n",
"# Plot\n",
"plt.loglog(x_data, np.abs(y_data)**2, label='Data', alpha=0.5, color='lightgray')\n",
"plt.loglog(x_welch, y_welch**2, label=f'Welch (p-val={pval_welch:.3f})')\n",
"plt.loglog(x_gwtc, y_gwtc **2, label=f'GWTC (p-val={pval_gwtc:.3f})')\n",
"plt.xlabel(\"Frequency [Hz]\")\n",
"plt.ylabel(\"PSD [Hz$^{-1}$]\")\n",
"plt.grid(False)\n",
"plt.legend()\n",
"plt.title(\"GW150914\")\n",
"plt.show()\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 483
},
"id": "Yhm1w6LsrRKY",
"outputId": "7ebf303b-fd81-47df-b0f4-b3cc2f305e20"
},
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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\n"
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"source": [
"## GW190521"
],
"metadata": {
"id": "hySBJNSmCVXy"
}
},
{
"cell_type": "code",
"source": [
"event_name = 'GW190521'\n",
"psd_end_time = event_gps(event_name)\n",
"\n",
"# # Fetch PSDs\n",
"x_data, y_data = get_GW_data(psd_end_time, f_i=20, f_f=896, return_raw_data=True)\n",
"x_welch, y_welch = get_GW_data_asd_welch(psd_end_time, det=\"H1\", duration=4, f_i=20, f_f=896, method='welch')\n",
"\n",
"# GWTC PSD\n",
"url = 'https://zenodo.org/records/6513631/files/IGWN-GWTC2p1-v2-GW190521_030229_PEDataRelease_mixed_cosmo.h5?download=1'\n",
"gwtc_psd = get_GWTC_psd(url, event_name, det='H1', f_i=20, f_f=225)\n",
"x_gwtc, y_gwtc = gwtc_psd['H1']\n"
],
"metadata": {
"id": "IH9AjSDyCRfe"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"# Compute p-value\n",
"pval_welch = get_pval(x_data, y_data, x_welch, y_welch)\n",
"pval_gwtc = get_pval(x_data, y_data, x_gwtc, y_gwtc)\n",
"\n",
"# Plot\n",
"plt.loglog(x_data, np.abs(y_data), label='Data', alpha=0.5, color='lightgray')\n",
"plt.loglog(x_welch, y_welch, label=f'Welch (p-val={pval_welch:.3f})')\n",
"plt.loglog(x_gwtc, y_gwtc , label=f'GWTC (p-val={pval_gwtc:.3f})')\n",
"plt.xlabel(\"Frequency [Hz]\")\n",
"plt.ylabel(\"ASD [Hz$^{-1/2}$]\")\n",
"plt.grid(False)\n",
"plt.legend()\n",
"plt.title(\"GW190521\")\n",
"plt.show()\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 483
},
"id": "kVFhnadkCX5A",
"outputId": "c0f6c424-5f82-46d5-f110-a4c0b7748ed6"
},
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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TyruF0reVxicEVFGaGhoiLpIsSRJodcTKUtEmScV9wsl7ysMzogoI1itVgQCgYjtjY2NodcTKUtEmScV9wsl7ysMzogoI+Tl5aGqqipie3Bbfn5+QmWJKPOk4n6h5H2FwRkRZYSioiLs2rULdXV1Yds//PDD0OuJlCWizJOK+4WS9xUGZ0SUEa699lq0trZi9erVoW2BQADl5eUoKSlB3759EypLRJknFfcLJe8rxmTeHBFROjz55JOoqakJjXZav3499u/fDwCYP38+XC4XSkpKMGXKFCxevBgHDx7EwIEDsXbtWuzZswdPP/102PHiKUtE+qLW/ULR+0pcU9YSEamgoKBABhD13+7du0PlGhoa5LvuukvOzc2VLRaLPHz4cPmNN96Iesx4yhKRfqh5v1DqviLIsizHH5cSERERUSqwzxkRERGRhjA4IyIiItIQBmdEREREGsLgjIiIiEhDGJwRERERaQiDMyIiIiINYXBGREREpCEMzoiIiIg0hMEZERERkYYwOCMiIiLSEAZnREQ9yJ49eyAIQuifJEmq1GPevHlh9Vi6dKkq9SDSIqPaFSAi/RIEocvXy8vLMXPmzPRUhuIydOhQTJ48GUZj+GNgz5496NevHwoKCrBnz55O9w/+7hNdnnnixInw+/3Ys2cP1q5dm9AxiDIVgzMiSlppaWnU7UVFRemtCMWsqKhI1WzVxIkTMXHiRGzcuJHBGVEHDM6IKGlskiIiUg77nBFRSgX7OM2cORO7du3C1KlTkZOTA1EUsXHjxlC5N998M9TUZbFYMGDAANx9992oqamJety3334bo0aNgt1uh9frxeTJk/H1119j5syZEAQhrElu48aNXfZrKiwsRGFhYdTX/va3v2Hs2LFwu92QJAmDBw/GihUrEAgEIsoKgoAxY8bg8OHDmDNnDvLy8mCxWHDOOeegvLy802v01ltv4corr0ROTg4sFgv69u2Lq6++Gm+//Xbo2giCgFmzZkXdPxAIwO/3w+/3R61XuhQWFob1I+v4j03cRLFh5oyI0uLbb79FSUkJBg0ahOnTp6OhoQFOpxMAsGzZMixduhRerxeTJk1CTk4OPv/8czz66KN47bXXsHXr1lBZAHjxxRcxdepUmM1mTJ06FXl5ediyZQsuvPBCDBkyRLE6z549G+Xl5ejTpw9+9rOfwe1244MPPsD999+Pd955Bxs2bIjos1VTU4OLL74YZrMZ1157LQKBAF544QXMnj0boihixowZYeVLS0uxfPlyOBwOTJ48GX379sWBAwfw/vvv49lnn8Vll12GcePGYcCAAXj++eexatUquFyusGP84x//wJEjR3DnnXfCYrEo9v7jtWDBgqjB9Pr16/Hpp5/CZrOlv1JEOsTgjIiSFi0jVVhYGJYp2bJlCxYvXozf/OY3YeXeffddLF26FBdeeCFee+01uN3u0GsVFRWYNWsWSktL8fjjjwMA6uvrccstt0AURWzevBkXXHBBqPzChQuxatUqRd5TRUUFysvLcc011+C5556D1WoNe7/Lli1DWVkZ7rjjjrD9PvvsM9x000146qmnYDAYALQFLUOGDMHvfve7sODsrbfewvLly9GvXz9s3rwZvXv3DjvW/v37AbRl5G699VbcfffdeOaZZzBv3rywcqtXrwYAzJkzR5H3DrQFmfE2Vy9YsCBi24YNG/DQQw9h4MCBWL58uTKVI8p0MhFRggB0+m/06NGyLMvy7t27ZQByr1695MbGxohjTJ48WQYgf/nll1HPUVRUJGdnZ4d+fvbZZ2UA8i9+8YuIsjU1NbLL5ZIByLt37w5tf/fdd2UAcmlpadRzFBQUyAUFBRHnNRqNcnV1dUT5lpYW2efzycOHD4+4HjabTa6trY3Y55JLLpEByMeOHQttmzRpkgxAfumll6LWq73Dhw/LkiTJ5557btj2r7/+WgYgjx07tttjyPLp38eMGTO6fD3Wf1354osvZKfTKft8PnnXrl1Ry3T3uyHqiZg5I6KkyTFMpzB06NCoTW5bt26FyWTCCy+8gBdeeCHi9aamJhw6dAhHjhyBz+fDp59+CgAYPXp0RFmXy4WioiJs2rQpgXdx2okTJ/DZZ5/B7/d3momzWCzYuXNnxPYzzzwzrAk2qG/fvgCA6upqOBwOAMAHH3wAQRAwYcKEbuvk8/nw85//HOvWrcP777+Piy66CMDprNmtt94a03uLVaxTaXSmqqoKV1xxBQKBAF599VWceeaZitaPKJMxOCOitMjNzY26/ciRI2hpacGyZcu63L++vh4+nw+1tbUAgF69esV1nnhUV1dDlmUcOnSo23p11L5Ztr1g37TW1tbQtpqaGng8nrAm067cdtttWLduHZ566ilcdNFFCAQCWLt2LXJycnDNNdfEVc9UOn78OCZNmoR9+/bhueeew8iRI9WuEpGucLQmEaVFZ5kWl8sFj8cDWZa7/FdQUBAqDwA//PBD1ON9//33EdtEse1W19LSEnWfjp3Yg+c477zzuq1XMtxuN6qrq9HQ0BBT+ZKSEpx33nl4/vnnUV1dHRoIMGvWLJhMpqTqopTW1lZMmzYNn376KVasWIHrrrtO7SoR6Q6DMyJS1YgRI1BdXY2vvvoqpvLDhg0DgKhNl7W1taisrIzY7vF4AAD79u2LeO0///lPKBsX5HA4cM455+Crr77C0aNHY6pXIkaMGAFZlvHGG2/EvM9tt92GxsZGrFu3DqtXr4YgCIoOBEjWggUL8Morr2D27Nm499571a4OkS4xOCMiVS1cuBAAcPPNN+PAgQMRrx8/fhwffPBB6Oerr74aHo8Hf/3rX/Hxxx+HlV26dGlEoAUAP/rRj+B0OvHyyy/j4MGDoe0NDQ24/fbbo9brV7/6FZqamjB79uyo00NUV1eH+r8lav78+QCAO++8E999913E69G2XX/99XC5XHjkkUewadMmXH755ejfv39S9VDKqlWr8OSTT+Kyyy7Dn/70J7WrQ6Rb7HNGRKq69NJL8dvf/haLFy/GmWeeiYkTJ6Jfv36or6/H3r17sWnTJowcOTKUXXI4HFi9ejWmTp2KUaNGhc1z9uWXX+KSSy7Be++9F3YOk8mEO+64Aw8++CDOO+88XHPNNWhpacGGDRuQn5+P/Pz8iHrNnj0bn3zyCf74xz9iwIABGD9+PM444wwcPXoUu3fvxnvvvYdZs2YlFYSMGzcO9913H1asWIHBgweH5jn74YcfsGXLFowYMQIVFRVh+9hsNsyYMQN/+MMfAAC33HJLwudX0vfff48777wTgiDg3HPPxUMPPRRRpqioCJMnT05/5Yj0Js2jQ4kogyCG6RS6m7ohaPPmzfKUKVPkvLw82WQyyX6/Xx46dKi8cOFC+aOPPooo/9Zbb8kXX3yxbLVaZbfbLV911VXyzp075RkzZkRMpSHLsnzy5En54Ycflvv37y+bTCa5b9++8t133y0fP3486lQaQevXr5evuOIKOTs7WzaZTHKvXr3k4cOHy0uWLJF37twZcT2CU4h01Fm9ZFmWX331VXn8+PGyx+ORzWaz3KdPH3ny5MnyO++8E/VYlZWVMgA5Ly9Pbm5ujlqmM7FOpdHZ9Qjq+LuPZQqOaOfkVBpEkZg5I6KEyTF0iC8sLIyp3MiRI+Ma1Xf55Zfj8ssvj7m8IAhYtGgRFi1aFPFaV1NGTJo0CZMmTYrpHF29z4qKiogsWFBwEfBYbd++HQBw0003RaxQkKxYf18dy8S6HxF1j33OiIh0pKWlBY899hiMRmNSTZpr166FIAiQJEnB2sVu3rx5EAQBY8eOVeX8RFrGzBkRkQ5s2bIFmzZtwsaNG/HFF19g3rx56NOnT9zHcbvdKC0tDf2sdOYtVsFF7oPGjBmjSj2ItIjBGRGRDrz99ttYtmwZvF4vbr75ZjzyyCMJHcftdse9ZmYqxNuUS9STCDI7CRARERFpBvucEREREWkIgzMiIiIiDWFwRkRERKQhDM6IiIiINITBGREREZGGMDgjIiIi0hAGZ0REREQawuCMiIiISEP+P6PgMFsXBXKaAAAAAElFTkSuQmCC\n"
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"source": [
"## Grabbing PSDs from OzStar\n",
"\n"
],
"metadata": {
"id": "8CdXHUiOxOVB"
}
},
{
"cell_type": "code",
"source": [
"import glob\n",
"import re\n",
"import os\n",
"import h5py\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from tqdm.auto import tqdm\n",
"from typing import Dict, List, Tuple\n",
"import ast\n",
"from gwpy.timeseries import TimeSeries\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import bilby\n",
"from gwosc.datasets import event_gps\n",
"from gwpy.timeseries import TimeSeries\n",
"import h5py\n",
"from scipy.stats import anderson, kstest, norm\n",
"import os\n",
"import h5py\n",
"import urllib.request\n",
"\n",
"\n",
"def get_event_name(path: str) -> str:\n",
" \"\"\"Extract GW event name (e.g., GW150914_095045) from filename.\"\"\"\n",
" match = re.search(r\"(GW\\d{6}_\\d{6})\", path)\n",
" if not match:\n",
" raise ValueError(f\"Could not extract event name from {path}\")\n",
" return match.group(1)\n",
"\n",
"\n",
"def find_analysis_group(fin: h5py.File) -> str:\n",
" \"\"\"Return preferred analysis group: default 'C01:IMRPhenomXPHM', else first with 'psds' and 'config_file'.\"\"\"\n",
" if \"C01:IMRPhenomXPHM\" in fin and \"psds\" in fin[\"C01:IMRPhenomXPHM\"]:\n",
" return \"C01:IMRPhenomXPHM\"\n",
" for k in fin.keys():\n",
" if isinstance(fin[k], h5py.Group):\n",
" group = fin[k]\n",
" has_psds = \"psds\" in group\n",
" has_config = \"config_file\" in group or any(\"config\" in subkey for subkey in group.keys())\n",
" if has_psds and has_config:\n",
" return k\n",
" raise KeyError(\"No group with both 'psds' and config data found in this file\")\n",
"\n",
"\n",
"def find_psd_group(fin: h5py.File) -> str:\n",
" \"\"\"Return preferred PSD group: default 'C01:IMRPhenomXPHM', else first with 'psds'.\"\"\"\n",
" if \"C01:IMRPhenomXPHM\" in fin and \"psds\" in fin[\"C01:IMRPhenomXPHM\"]:\n",
" return \"C01:IMRPhenomXPHM\"\n",
" for k in fin.keys():\n",
" if isinstance(fin[k], h5py.Group) and \"psds\" in fin[k]:\n",
" return k\n",
" raise KeyError(\"No group with 'psds' found in this file\")\n",
"\n",
"\n",
"def get_pe_paths() -> Dict[str, str]:\n",
" \"\"\"Get paths to parameter estimation data files.\"\"\"\n",
" dirs = [\n",
" \"/datasets/LIGO/public/gwosc.osgstorage.org/gwdata/zenodo/ligo-virgo-kagra/2021/5546662/1\",\n",
" \"/datasets/LIGO/public/gwosc.osgstorage.org/gwdata/zenodo/ligo-virgo-kagra/2022/5117702/v2\",\n",
" ]\n",
" files = []\n",
" for d in dirs:\n",
" files.extend(glob.glob(f\"{d}/*PEDataRelease_mixed_cosmo.h5\"))\n",
" paths = {get_event_name(f): f for f in files}\n",
" return paths\n",
"\n",
"\n",
"def extract_psds(outdir: str, fmin: float = 20.0, fmax: float = 2048.0) -> str:\n",
" \"\"\"Extract PSDs from GWOSC PEDataRelease files and save them into one HDF5 file.\"\"\"\n",
" paths = get_pe_paths()\n",
" os.makedirs(outdir, exist_ok=True)\n",
" outfn = os.path.join(outdir, \"GWTC3_psds.h5\")\n",
"\n",
" with h5py.File(outfn, \"w\") as fout:\n",
" for event, fpath in tqdm(paths.items(), desc=\"Extracting PSDs\"):\n",
" with h5py.File(fpath, \"r\") as fin:\n",
" try:\n",
" psd_group_name = find_psd_group(fin)\n",
" except KeyError:\n",
" print(f\"[WARN] No psds group found in {fpath}\")\n",
" continue\n",
"\n",
" psd_data = fin[psd_group_name][\"psds\"]\n",
" g = fout.create_group(event)\n",
" g.attrs[\"psd_group\"] = psd_group_name\n",
"\n",
" for ifo_name in psd_data:\n",
" if ifo_name in ['V1', \"K1\"]:\n",
" continue # skip Virgo/KAGRA\n",
"\n",
" freqs = psd_data[ifo_name][:, 0]\n",
" vals = psd_data[ifo_name][:, 1]\n",
" mask = (freqs >= fmin) & (freqs <= fmax)\n",
" freqs, vals = freqs[mask], vals[mask]\n",
"\n",
" ifo_group = g.create_group(ifo_name)\n",
" ifo_group.create_dataset(\"freqs\", data=freqs)\n",
" ifo_group.create_dataset(\"psd\", data=vals)\n",
"\n",
" return outfn\n",
"\n",
"\n",
"def get_specific_configs(file_path: str, h5_config_group_path: str, keys_to_retrieve: List[str]) -> Dict:\n",
" configs_dict = {}\n",
"\n",
" try:\n",
" if not os.path.exists(file_path):\n",
" print(f\"Error: The file '{file_path}' was not found.\")\n",
" return configs_dict\n",
"\n",
" with h5py.File(file_path, 'r') as f:\n",
" if h5_config_group_path not in f:\n",
" print(f\"Error: The HDF5 path '{h5_config_group_path}' was not found.\")\n",
" return configs_dict\n",
"\n",
" config_group = f[h5_config_group_path]\n",
"\n",
" for key in keys_to_retrieve:\n",
" try:\n",
" obj = config_group[key]\n",
"\n",
" if isinstance(obj, h5py.Dataset):\n",
" content = obj[()]\n",
"\n",
" # Handle numpy arrays containing byte strings\n",
" if isinstance(content, np.ndarray):\n",
" # Extract the first (and usually only) element from the array\n",
" if content.size > 0:\n",
" content = content.item() # Extract scalar from array\n",
" else:\n",
" print(f\"Warning: Empty array for key '{key}'\")\n",
" continue\n",
"\n",
" # Handle bytes by decoding first\n",
" if isinstance(content, bytes):\n",
" content = content.decode('utf-8')\n",
"\n",
" # Try to evaluate as Python literal (dict, list, etc.)\n",
" try:\n",
" processed_value = ast.literal_eval(content)\n",
" except (ValueError, SyntaxError) as e:\n",
" print(f\"Info: Storing '{key}' as string (couldn't parse as literal)\")\n",
" # Store as string if it can't be parsed as a Python literal\n",
" processed_value = content\n",
"\n",
" configs_dict[key] = processed_value\n",
"\n",
" else:\n",
" print(f\"Warning: '{key}' is not a dataset and was skipped.\")\n",
"\n",
" except KeyError:\n",
" print(f\"Warning: Key '{key}' not found in the HDF5 group.\")\n",
"\n",
" except Exception as e:\n",
" print(f\"Warning: Error processing '{key}': {e}\")\n",
"\n",
" except Exception as e:\n",
" print(f\"An unexpected error occurred: {e}\")\n",
"\n",
" return configs_dict\n",
"\n",
"\n",
"def get_gw_event_configs(fpath: str, analysis_group: str = None) -> Dict:\n",
" \"\"\"Get configuration parameters for a gravitational wave event.\"\"\"\n",
" with h5py.File(fpath, 'r') as fin:\n",
" if analysis_group is None:\n",
" analysis_group = find_analysis_group(fin)\n",
"\n",
" # Try different possible config paths\n",
" possible_config_paths = [\n",
" f'{analysis_group}/config_file/config',\n",
" f'{analysis_group}/config',\n",
" f'{analysis_group}/configuration'\n",
" ]\n",
"\n",
" h5_config_group = None\n",
" for path in possible_config_paths:\n",
" if path in fin:\n",
" h5_config_group = path\n",
" break\n",
"\n",
" if h5_config_group is None:\n",
" raise KeyError(f\"No config group found in {analysis_group}\")\n",
"\n",
" desired_keys = [\n",
" 'channel-dict', 'deltaT', 'duration', 'maximum-frequency',\n",
" 'minimum-frequency', 'psd-fractional-overlap', 'psd-length',\n",
" 'psd-maximum-duration', 'psd-method', 'trigger-time', 'tukey-roll-off'\n",
" ]\n",
"\n",
" configs = get_specific_configs(fpath, h5_config_group, desired_keys)\n",
" configs['analysis_group'] = analysis_group # Store which group was used\n",
"\n",
" # Helper function to safely extract scalar values\n",
" def extract_scalar(value):\n",
" \"\"\"Extract scalar value from numpy array or return as-is if already scalar.\"\"\"\n",
" if hasattr(value, 'item'): # numpy array\n",
" return value.item()\n",
" elif hasattr(value, '__len__') and len(value) == 1: # single-element sequence\n",
" return value[0]\n",
" else:\n",
" return value\n",
"\n",
" # Calculate timing parameters if we have the required keys\n",
" if all(key in configs for key in ['trigger-time', 'deltaT', 'duration']):\n",
" trigger_time = float(extract_scalar(configs['trigger-time']))\n",
" delta_t = float(extract_scalar(configs['deltaT']))\n",
" duration = float(extract_scalar(configs['duration']))\n",
"\n",
" end_time = trigger_time + delta_t\n",
" start_time = end_time - duration\n",
" psd_end_time = start_time\n",
"\n",
" # Calculate PSD duration with safety check\n",
" psd_max_duration_raw = configs.get('psd-maximum-duration', 32 * duration)\n",
" psd_max_duration = float(extract_scalar(psd_max_duration_raw))\n",
" psd_duration = min(32 * duration, psd_max_duration)\n",
" psd_start_time = psd_end_time - psd_duration\n",
"\n",
" # Add calculated times to configs\n",
" configs['analysis_start_time'] = start_time\n",
" configs['analysis_end_time'] = end_time\n",
" configs['psd_start_time'] = psd_start_time\n",
" configs['psd_end_time'] = psd_end_time\n",
" configs['psd_duration'] = psd_duration\n",
" configs['postevent_start_time'] = end_time\n",
" configs['postevent_end_time'] = end_time + duration\n",
"\n",
" return configs\n",
"\n",
"\n",
"def _get_data_files_and_gps_times(det: str = \"L1\") -> Dict[int, str]:\n",
" search_str = f\"/datasets/LIGO/public/gwosc.osgstorage.org/gwdata/O3b/strain.4k/hdf.v1/{det}/*/*.hdf5\"\n",
" files = glob.glob(search_str)\n",
"\n",
" if not files:\n",
" raise FileNotFoundError(f\"No HDF5 files found at {search_str}\")\n",
"\n",
" path_dict = {}\n",
" for f in files:\n",
" match = re.search(r\"R1-(\\d+)-\\d+\\.hdf5\", f)\n",
" if match:\n",
" gps_start = int(match.group(1))\n",
" path_dict[gps_start] = f\n",
"\n",
" return dict(sorted(path_dict.items()))\n",
"\n",
"\n",
"def get_data_dicts() -> Dict[str, Dict[int, str]]:\n",
" return {\n",
" \"L1\": _get_data_files_and_gps_times(\"L1\"),\n",
" \"H1\": _get_data_files_and_gps_times(\"H1\"),\n",
" }\n",
"\n",
"\n",
"def get_fnames_for_range(gps_start: float, gps_end: float, det: str = \"L1\") -> List[str]:\n",
" gps_start = int(gps_start)\n",
" gps_end = int(gps_end)\n",
"\n",
" gps_files = _get_data_files_and_gps_times(det)\n",
" start_times = sorted(gps_files.keys())\n",
"\n",
" files = []\n",
"\n",
" for i in range(len(start_times)):\n",
" t0 = start_times[i]\n",
" t1 = start_times[i + 1] if i + 1 < len(start_times) else float('inf')\n",
"\n",
" # Check if [gps_start, gps_end] intersects with [t0, t1]\n",
" if gps_end > t0 and gps_start < t1:\n",
" files.append(gps_files[t0])\n",
"\n",
" return files\n",
"\n",
"\n",
"def load_strain_segment(gps_start: float, gps_end: float, detector: str = \"L1\") -> Tuple[np.ndarray, np.ndarray]:\n",
" files = get_fnames_for_range(gps_start, gps_end, detector)\n",
" if not files:\n",
" raise ValueError(f\"No files found for {detector} in time range {gps_start}-{gps_end}\")\n",
"\n",
" try:\n",
" # Use GWPy to read the strain data\n",
" strain_ts = TimeSeries.read(files, format='hdf5.gwosc', start=gps_start, end=gps_end)\n",
"\n",
" # Convert to numpy arrays\n",
" times = strain_ts.times.value # Get time array as numpy array\n",
" strain = strain_ts.value # Get strain values as numpy array\n",
"\n",
" return times, strain\n",
"\n",
" except Exception as e:\n",
" raise ValueError(f\"Could not read strain data for {detector}: {e}\")\n",
"\n",
"\n",
"def read_strain_data(file_paths: List[str], gps_start: float, gps_end: float,\n",
" detector: str) -> Tuple[np.ndarray, np.ndarray]:\n",
" if not file_paths:\n",
" raise ValueError(f\"No files provided for {detector}\")\n",
"\n",
" try:\n",
" strain_ts = TimeSeries.read(file_paths, format='hdf5.gwosc', start=gps_start, end=gps_end)\n",
" return strain_ts.times.value, strain_ts.value\n",
"\n",
" except Exception as e:\n",
" raise ValueError(f\"Could not read strain data for {detector} from {len(file_paths)} files: {e}\")\n",
"\n",
"\n",
"def get_strain_data_for_event(event_configs: Dict, detector: str) -> Dict[str, Tuple[np.ndarray, np.ndarray]]:\n",
" result = {}\n",
"\n",
" # Get analysis data\n",
" if all(key in event_configs for key in ['analysis_start_time', 'analysis_end_time']):\n",
" try:\n",
" analysis_times, analysis_strain = load_strain_segment(\n",
" event_configs['analysis_start_time'],\n",
" event_configs['analysis_end_time'],\n",
" detector\n",
" )\n",
" result['analysis'] = (analysis_times, analysis_strain)\n",
" except Exception as e:\n",
" print(f\"Warning: Could not get analysis data for {detector}: {e}\")\n",
"\n",
" # Get post-event data\n",
" if all(key in event_configs for key in ['postevent_start_time', 'postevent_end_time']):\n",
" try:\n",
" postevent_times, postevent_strain = load_strain_segment(\n",
" event_configs['postevent_start_time'],\n",
" event_configs['postevent_end_time'],\n",
" detector\n",
" )\n",
" result['postevent'] = (postevent_times, postevent_strain)\n",
" except Exception as e:\n",
" print(f\"Warning: Could not get postevent data for {detector}: {e}\")\n",
"\n",
" # Get psd data\n",
" if all(key in event_configs for key in ['psd_start_time', 'psd_end_time']):\n",
" try:\n",
" psd_times, psd_strain = load_strain_segment(\n",
" event_configs['psd_start_time'],\n",
" event_configs['psd_end_time'],\n",
" detector\n",
" )\n",
" result['psd'] = (psd_times, psd_strain)\n",
" except Exception as e:\n",
" print(f\"Warning: Could not get PSD data for {detector}: {e}\")\n",
"\n",
" return result\n",
"\n",
"\n",
"def get_welch_psd(strain_data: np.ndarray, times: np.ndarray,\n",
" analysis_duration: float, roll_off: float = 0.4,\n",
" overlap: float = 0.5) -> Tuple[np.ndarray, np.ndarray]:\n",
" \"\"\"\n",
" Calculate Welch PSD estimate from strain data.\n",
"\n",
" Follows bilby_pipe:\n",
" https://lscsoft.docs.ligo.org/bilby_pipe/master/_modules/bilby_pipe/data_generation.html#DataGenerationInput.__generate_psd\n",
"\n",
" \"\"\"\n",
" # Create TimeSeries object\n",
" strain_ts = TimeSeries(strain_data, times=times)\n",
"\n",
" # Calculate Welch PSD\n",
" psd = strain_ts.psd(\n",
" fftlength=analysis_duration,\n",
" overlap=analysis_duration * overlap,\n",
" window=('tukey', roll_off),\n",
" method='median'\n",
" )\n",
"\n",
" return psd.frequencies.value, psd.value\n",
"\n",
"\n",
"def get_fd_data(strain_data: np.ndarray, times: np.ndarray, det: str, roll_off: float, fmin: float, fmax: float):\n",
" \"\"\"Fixed function with correct variable names and parameters.\"\"\"\n",
" strain_ts = TimeSeries(strain_data, times=times)\n",
" ifo = bilby.gw.detector.get_empty_interferometer(det)\n",
" ifo.strain_data.roll_off = roll_off\n",
" ifo.maximum_frequency = fmax # Fixed: was f_f\n",
" ifo.minimum_frequency = fmin # Fixed: was f_i\n",
" ifo.strain_data.set_from_gwpy_timeseries(strain_ts)\n",
"\n",
" x = ifo.strain_data.frequency_array\n",
" y = ifo.strain_data.frequency_domain_strain\n",
" Ew = np.sqrt(ifo.strain_data.window_factor)\n",
"\n",
" I = (x >= fmin) & (x <= fmax) # Fixed: was f_i and f_f\n",
" return x[I], y[I] / Ew\n",
"\n",
"\n",
"def get_pval(x_data, y_data, x_psd, y_psd):\n",
" # Keep only the data points where the frequencies exactly match\n",
" I_keep = np.isin(x_data, x_psd)\n",
"\n",
" # Make sure the PSD values are aligned\n",
" common_freqs = x_data[I_keep]\n",
" y_psd_matched = y_psd[np.isin(x_psd, common_freqs)]\n",
"\n",
" # Compute the normalized ratio\n",
" ratio_real = np.real(y_data[I_keep] / y_psd_matched)\n",
" ratio_imag = np.imag(y_data[I_keep] / y_psd_matched)\n",
"\n",
" # Combine real and imaginary parts\n",
" ratio_combined = np.concatenate([ratio_real, ratio_imag])\n",
"\n",
" # Anderson-Darling and KS test\n",
" a2_stat = anderson(ratio_combined).statistic\n",
" pvalue = kstest(ratio_combined, norm.cdf).pvalue\n",
"\n",
" return pvalue\n",
"\n",
"\n",
"class GWEventData:\n",
" \"\"\"Class to store and manage gravitational wave event data.\"\"\"\n",
"\n",
" def __init__(self, event_name: str):\n",
" self.event_name = event_name\n",
" self.configs = {}\n",
" self.psds = {} # {detector: {'freqs': array, 'psd': array}}\n",
" self.strain_data = {} # {detector: {'analysis': (times, strain), 'psd': (times, strain)}}\n",
" self.welch_psds = {} # {detector: {'freqs': array, 'psd': array}} - computed from strain\n",
" self.postevent_fd = {} # {detector: {'freqs': array, 'data_fd': array}}\n",
" self.analysis_group = None\n",
" self.fmin = {} # detector-specific minimum frequencies\n",
" self.fmax = {} # detector-specific maximum frequencies\n",
"\n",
" @classmethod\n",
" def from_ozstar(cls, event_name: str): # Fixed: removed extra parameters\n",
" \"\"\"Load event data from OZSTAR GWOSC files.\"\"\"\n",
" instance = cls(event_name)\n",
"\n",
" # Get PE file path\n",
" pe_paths = get_pe_paths()\n",
" if event_name not in pe_paths:\n",
" raise ValueError(f\"Event {event_name} not found in PE data paths\")\n",
"\n",
" pe_file_path = pe_paths[event_name]\n",
"\n",
" # Load configs\n",
" instance.configs = get_gw_event_configs(pe_file_path)\n",
" instance.analysis_group = instance.configs.get('analysis_group')\n",
"\n",
" # Extract and convert config values properly - keep detector-specific values as dicts\n",
" def get_config_value(key):\n",
" \"\"\"Extract config value, preserving detector dictionaries.\"\"\"\n",
" value = instance.configs.get(key)\n",
" if value is None:\n",
" raise KeyError(f\"Config key '{key}' not found\")\n",
"\n",
" # If it's already a dictionary, return it\n",
" if isinstance(value, dict):\n",
" return value\n",
" # If it's a single value, convert to float\n",
" else:\n",
" return float(instance._extract_scalar(value))\n",
"\n",
" fmin = get_config_value('minimum-frequency') # Keep as dict\n",
" fmax = get_config_value('maximum-frequency') # Keep as dict\n",
" analysis_duration = get_config_value('duration')\n",
" overlap = get_config_value('psd-fractional-overlap')\n",
" roll_off = get_config_value('tukey-roll-off')\n",
"\n",
" # Store the frequency dicts in the instance for later use\n",
" instance.fmin = fmin\n",
" instance.fmax = fmax\n",
"\n",
" # Load PSDs from PE file\n",
" with h5py.File(pe_file_path, \"r\") as fin:\n",
" analysis_group = instance.analysis_group or find_analysis_group(fin)\n",
" psd_data = fin[analysis_group][\"psds\"]\n",
"\n",
" for ifo_name in psd_data:\n",
" if ifo_name in ['H1', 'L1']: # Only load H1 and L1\n",
" freqs = psd_data[ifo_name][:, 0]\n",
" vals = psd_data[ifo_name][:, 1]\n",
"\n",
" # Apply frequency mask using detector-specific limits\n",
" detector_fmin = float(instance._extract_scalar(fmin.get(ifo_name, fmin.get('H1', 20.0))))\n",
" detector_fmax = float(instance._extract_scalar(fmax.get(ifo_name, fmax.get('H1', 2048.0))))\n",
"\n",
" mask = (freqs >= detector_fmin) & (freqs <= detector_fmax)\n",
" freqs, vals = freqs[mask], vals[mask]\n",
"\n",
" instance.psds[ifo_name] = {\n",
" 'freqs': freqs,\n",
" 'psd': vals\n",
" }\n",
"\n",
" # Load strain data\n",
" print(f\"Loading strain data for {event_name}...\")\n",
" for detector in ['H1', 'L1']:\n",
" if detector in instance.psds: # Only load for detectors we have PSDs for\n",
" try:\n",
" strain_data = get_strain_data_for_event(instance.configs, detector)\n",
" if strain_data:\n",
" instance.strain_data[detector] = strain_data\n",
" print(f\" {detector}: Loaded {len(strain_data)} data segments\")\n",
"\n",
" # Calculate Welch PSD from strain data\n",
" if 'psd' in strain_data:\n",
" psd_times, psd_strain = strain_data['psd']\n",
"\n",
" # Compute Welch PSD\n",
" welch_freqs, welch_psd = get_welch_psd(\n",
" psd_strain, psd_times, analysis_duration, roll_off, overlap\n",
" )\n",
"\n",
" # Apply frequency mask using detector-specific limits\n",
" detector_fmin = float(instance._extract_scalar(fmin.get(detector, fmin.get('H1', 20.0))))\n",
" detector_fmax = float(instance._extract_scalar(fmax.get(detector, fmax.get('H1', 2048.0))))\n",
"\n",
" mask = (welch_freqs >= detector_fmin) & (welch_freqs <= detector_fmax)\n",
" welch_freqs, welch_psd = welch_freqs[mask], welch_psd[mask]\n",
"\n",
" instance.welch_psds[detector] = {\n",
" 'freqs': welch_freqs,\n",
" 'psd': welch_psd\n",
" }\n",
"\n",
" # get postevent data - Fixed: use 'postevent' instead of 'psd'\n",
" if 'postevent' in strain_data:\n",
" postevent_times, postevent_strain = strain_data['postevent'] # Fixed: was using 'psd'\n",
"\n",
" # Get detector-specific frequency limits\n",
" detector_fmin = float(instance._extract_scalar(fmin.get(detector, fmin.get('H1', 20.0))))\n",
" detector_fmax = float(instance._extract_scalar(fmax.get(detector, fmax.get('H1', 2048.0))))\n",
"\n",
" postevent_freqs, postevent_fd = get_fd_data( # Fixed: was postevnet_fd\n",
" postevent_strain, postevent_times, detector, roll_off, detector_fmin, detector_fmax\n",
" )\n",
" instance.postevent_fd[detector] = {\n",
" 'freqs': postevent_freqs,\n",
" 'datafd': postevent_fd # Fixed: was using different key name\n",
" }\n",
"\n",
" except Exception as e:\n",
" print(f\" Warning: Could not load strain data for {detector}: {e}\")\n",
"\n",
" return instance\n",
"\n",
" def _extract_scalar(self, value):\n",
" \"\"\"Extract scalar value from numpy array or return as-is if already scalar.\"\"\"\n",
" # Handle bytes that need to be decoded and evaluated\n",
" if isinstance(value, bytes):\n",
" try:\n",
" # Decode bytes to string\n",
" value_str = value.decode('utf-8')\n",
" # Try to evaluate as Python literal (dict, list, etc.)\n",
" value = ast.literal_eval(value_str)\n",
" except (UnicodeDecodeError, ValueError, SyntaxError):\n",
" # If decoding/evaluation fails, return as string\n",
" return value.decode('utf-8') if isinstance(value, bytes) else value\n",
"\n",
" # Handle string representations of Python objects\n",
" if isinstance(value, str):\n",
" try:\n",
" value = ast.literal_eval(value)\n",
" except (ValueError, SyntaxError):\n",
" # If evaluation fails, return as string\n",
" return value\n",
"\n",
" # Extract scalar from numpy arrays or single-element sequences\n",
" if hasattr(value, 'item'): # numpy array\n",
" return value.item()\n",
" elif hasattr(value, '__len__') and len(value) == 1: # single-element sequence\n",
" return value[0]\n",
" else:\n",
" return value\n",
"\n",
" def to_hdf5(self, output_dir: str = \".\", filename: str = None):\n",
" \"\"\"Save event data to HDF5 file.\"\"\"\n",
" if filename is None:\n",
" filename = f\"{self.event_name}_data.h5\"\n",
"\n",
" os.makedirs(output_dir, exist_ok=True)\n",
" filepath = os.path.join(output_dir, filename)\n",
"\n",
" with h5py.File(filepath, \"w\") as f:\n",
" # Save metadata\n",
" f.attrs['event_name'] = self.event_name\n",
" f.attrs['analysis_group'] = self.analysis_group or 'unknown'\n",
"\n",
" # Save configs\n",
" config_group = f.create_group(\"configs\")\n",
" for key, value in self.configs.items():\n",
" try:\n",
" if isinstance(value, (str, bytes)):\n",
" config_group.create_dataset(key, data=str(value))\n",
" elif isinstance(value, (int, float, np.number)):\n",
" config_group.create_dataset(key, data=value)\n",
" elif isinstance(value, (list, tuple, np.ndarray)):\n",
" config_group.create_dataset(key, data=value)\n",
" elif isinstance(value, dict):\n",
" config_group.create_dataset(key, data=str(value))\n",
" else:\n",
" config_group.create_dataset(key, data=str(value))\n",
" except Exception as e:\n",
" print(f\"Warning: Could not save config '{key}': {e}\")\n",
"\n",
" # Save PSDs (from PE file)\n",
" psd_group = f.create_group(\"psds\")\n",
" for detector, psd_data in self.psds.items():\n",
" det_group = psd_group.create_group(detector)\n",
" det_group.create_dataset(\"freqs\", data=psd_data['freqs'])\n",
" det_group.create_dataset(\"psd\", data=psd_data['psd'])\n",
"\n",
" # Save Welch PSDs (computed from strain data)\n",
" if self.welch_psds:\n",
" welch_group = f.create_group(\"welch_psds\")\n",
" for detector, psd_data in self.welch_psds.items():\n",
" det_group = welch_group.create_group(detector)\n",
" det_group.create_dataset(\"freqs\", data=psd_data['freqs'])\n",
" det_group.create_dataset(\"psd\", data=psd_data['psd'])\n",
"\n",
" # Save postevent frequency domain data\n",
" if self.postevent_fd:\n",
" fd_group = f.create_group(\"postevent_fd\")\n",
" for detector, fd_data in self.postevent_fd.items():\n",
" det_group = fd_group.create_group(detector)\n",
" det_group.create_dataset(\"freqs\", data=fd_data['freqs'])\n",
" det_group.create_dataset(\"datafd\", data=fd_data['datafd'])\n",
"\n",
" # Save strain data\n",
" if self.strain_data:\n",
" strain_group = f.create_group(\"strain_data\")\n",
" for detector, data_dict in self.strain_data.items():\n",
" det_group = strain_group.create_group(detector)\n",
" for data_type, (times, strain) in data_dict.items():\n",
" type_group = det_group.create_group(data_type)\n",
" type_group.create_dataset(\"times\", data=times)\n",
" type_group.create_dataset(\"strain\", data=strain)\n",
" # Save metadata\n",
" type_group.attrs['duration'] = times[-1] - times[0]\n",
" type_group.attrs['sample_rate'] = len(times) / (times[-1] - times[0])\n",
" type_group.attrs['start_time'] = times[0]\n",
" type_group.attrs['end_time'] = times[-1]\n",
"\n",
" return filepath\n",
"\n",
" @classmethod\n",
" def from_hdf5(cls, filepath: str):\n",
" \"\"\"Load event data from HDF5 file.\"\"\"\n",
" with h5py.File(filepath, \"r\") as f:\n",
" event_name = f.attrs['event_name']\n",
" if isinstance(event_name, bytes):\n",
" event_name = event_name.decode('utf-8')\n",
"\n",
" instance = cls(event_name)\n",
" instance.analysis_group = f.attrs.get('analysis_group', 'unknown')\n",
" if isinstance(instance.analysis_group, bytes):\n",
" instance.analysis_group = instance.analysis_group.decode('utf-8')\n",
"\n",
" # Load configs\n",
" config_group = f[\"configs\"]\n",
" for key in config_group.keys():\n",
" data = config_group[key][()]\n",
" if isinstance(data, bytes):\n",
" data = data.decode('utf-8')\n",
" instance.configs[key] = data\n",
"\n",
" # Load PSDs\n",
" psd_group = f[\"psds\"]\n",
" for detector in psd_group.keys():\n",
" det_group = psd_group[detector]\n",
" instance.psds[detector] = {\n",
" 'freqs': det_group[\"freqs\"][:],\n",
" 'psd': det_group[\"psd\"][:]\n",
" }\n",
"\n",
" # Load Welch PSDs if present\n",
" if \"welch_psds\" in f:\n",
" welch_group = f[\"welch_psds\"]\n",
" for detector in welch_group.keys():\n",
" det_group = welch_group[detector]\n",
" instance.welch_psds[detector] = {\n",
" 'freqs': det_group[\"freqs\"][:],\n",
" 'psd': det_group[\"psd\"][:]\n",
" }\n",
"\n",
" # Load postevent frequency domain data if present\n",
" if \"postevent_fd\" in f:\n",
" fd_group = f[\"postevent_fd\"]\n",
" for detector in fd_group.keys():\n",
" det_group = fd_group[detector]\n",
" instance.postevent_fd[detector] = {\n",
" 'freqs': det_group[\"freqs\"][:],\n",
" 'datafd': det_group[\"datafd\"][:]\n",
" }\n",
"\n",
" # Load strain data if present\n",
" if \"strain_data\" in f:\n",
" strain_group = f[\"strain_data\"]\n",
" for detector in strain_group.keys():\n",
" det_group = strain_group[detector]\n",
" instance.strain_data[detector] = {}\n",
" for data_type in det_group.keys():\n",
" type_group = det_group[data_type]\n",
" times = type_group[\"times\"][:]\n",
" strain = type_group[\"strain\"][:]\n",
" instance.strain_data[detector][data_type] = (times, strain)\n",
"\n",
" return instance\n",
"\n",
" def plot_psds(self, output_dir: str = \".\"):\n",
" \"\"\"Plot PSDs for this event, optionally comparing PE PSDs with Welch estimates.\"\"\"\n",
" if not self.psds:\n",
" print(\"No PSD data to plot\")\n",
" return\n",
"\n",
" # Create subplots for each detector\n",
" n_detectors = len(self.psds)\n",
" fig, axes = plt.subplots(n_detectors, 1, figsize=(10, 4*n_detectors),\n",
" sharex=True, squeeze=False)\n",
" axes = axes.flatten()\n",
"\n",
" colors = {'H1': 'red', 'L1': 'blue'}\n",
"\n",
" for i, detector in enumerate(sorted(self.psds.keys())):\n",
" ax = axes[i]\n",
" psd_data = self.psds[detector]\n",
"\n",
" # Only proceed if we have the required data\n",
" if detector not in self.welch_psds or detector not in self.postevent_fd:\n",
" print(f\"Warning: Missing data for {detector}, skipping plot\")\n",
" continue\n",
"\n",
" welch_data = self.welch_psds[detector]\n",
" fd_data = self.postevent_fd[detector]\n",
"\n",
" # Calculate p-values\n",
" pval_gwtc = get_pval(fd_data['freqs'], fd_data['datafd'], psd_data['freqs'], np.sqrt(psd_data['psd']))\n",
" pval_welch = get_pval(fd_data['freqs'], fd_data['datafd'], welch_data['freqs'], np.sqrt(welch_data['psd']))\n",
"\n",
" # plot postevent FD data\n",
" ax.loglog(fd_data['freqs'], np.abs(fd_data['datafd'])**2, color='lightgray', alpha=0.4, label='Postevent Data')\n",
"\n",
" # Plot GWTC PSD\n",
" ax.loglog(psd_data['freqs'], psd_data['psd'],\n",
" color=colors[detector], linewidth=1.5,\n",
" label=f'GWTC PSD (pval={pval_gwtc:.3f})')\n",
"\n",
" # Plot Welch PSD\n",
" ax.loglog(welch_data['freqs'], welch_data['psd'],\n",
" color=colors[detector], linewidth=2, linestyle='--', alpha=0.3,\n",
" label=f'Welch PSD (pval={pval_welch:.3f})')\n",
"\n",
" ax.set_ylabel(\"PSD [strain²/Hz]\", fontsize=12)\n",
" ax.set_title(f\"{detector} Power Spectral Density\", fontsize=12)\n",
" ax.legend(fontsize=10)\n",
" ax.grid(True, alpha=0.3)\n",
"\n",
" # Set reasonable y-axis limits\n",
" if len(psd_data['psd']) > 0:\n",
" ymin = np.min(psd_data['psd']) * 0.1\n",
" ymax = np.max(psd_data['psd']) * 10\n",
" ax.set_ylim(ymin, ymax)\n",
"\n",
" # Set x-axis label only on bottom subplot\n",
" axes[-1].set_xlabel(\"Frequency [Hz]\", fontsize=12)\n",
"\n",
" # Overall title\n",
" fig.suptitle(f\"{self.event_name} Power Spectral Densities\", fontsize=14, y=0.98)\n",
" plt.tight_layout()\n",
"\n",
" # Save plot\n",
" os.makedirs(output_dir, exist_ok=True)\n",
" plot_path = os.path.join(output_dir, f\"{self.event_name}_psd.png\")\n",
" plt.savefig(plot_path, dpi=150, bbox_inches='tight')\n",
" print(f\"PSD plot saved to: {plot_path}\")\n",
"\n",
" plt.close()\n",
"\n",
"\n",
"def process_and_save_event(event_name: str, output_dir: str = \"event_data\") -> str: # Fixed: removed extra parameters\n",
" \"\"\"Process a single event and save to HDF5.\"\"\"\n",
" try:\n",
" # Load from OZSTAR - Fixed: removed extra parameters\n",
" event_data = GWEventData.from_ozstar(event_name)\n",
"\n",
" # Save to HDF5\n",
" filepath = event_data.to_hdf5(output_dir)\n",
"\n",
" # Generate plots\n",
" event_data.plot_psds(output_dir)\n",
"\n",
" # Only plot strain if we have the data and the method exists\n",
" if event_data.strain_data and hasattr(event_data, 'plot_strain'):\n",
" event_data.plot_strain('analysis', output_dir, time_window=10.0) # 10s window\n",
" event_data.plot_strain('psd', output_dir)\n",
"\n",
" print(f\"Successfully processed {event_name}\")\n",
" print(f\"Data saved to: {filepath}\")\n",
" print(\"-\" * 50)\n",
"\n",
" return filepath\n",
"\n",
" except Exception as e:\n",
" print(f\"Error processing {event_name}: {e}\")\n",
" return None\n",
"\n",
"\n",
"def process_all_events(output_dir: str = \"event_data\"): # Fixed: removed extra parameters\n",
" \"\"\"Process all available events and save to individual HDF5 files.\"\"\"\n",
" pe_paths = get_pe_paths()\n",
"\n",
" print(f\"Found {len(pe_paths)} events to process\")\n",
" print(f\"Output directory: {output_dir}\")\n",
" print(\"=\" * 50)\n",
"\n",
" successful = []\n",
" failed = []\n",
"\n",
" for event_name in tqdm(pe_paths.keys(), desc=\"Processing events\"):\n",
" filepath = process_and_save_event(event_name, output_dir) # Fixed: removed extra parameters\n",
" if filepath:\n",
" successful.append(event_name)\n",
" else:\n",
" failed.append(event_name)\n",
"\n",
" print(f\"\\nProcessing complete:\")\n",
" print(f\"Successful: {len(successful)} events\")\n",
" print(f\"Failed: {len(failed)} events\")\n",
"\n",
" if failed:\n",
" print(f\"Failed events: {failed}\")\n",
"\n",
" return successful, failed\n",
"\n",
"\n",
"def main():\n",
" \"\"\"Main processing function with examples.\"\"\"\n",
" # Initialize paths\n",
" pe_paths = get_pe_paths()\n",
" data_paths = get_data_dicts()\n",
"\n",
" print(f\"Found {len(pe_paths)} PE data files\")\n",
" print(f\"Found {len(data_paths['L1'])} L1 strain files\")\n",
" print(f\"Found {len(data_paths['H1'])} H1 strain files\")\n",
"\n",
" # Example 1: Process a single event with strain data\n",
" if pe_paths:\n",
" first_event = list(pe_paths.keys())[0]\n",
" print(f\"\\n=== Example 1: Processing single event with strain data ===\")\n",
" print(f\"Processing: {first_event}\")\n",
"\n",
" try:\n",
" # Load from OZSTAR with strain data - Fixed: removed extra parameters\n",
" event_data = GWEventData.from_ozstar(first_event)\n",
"\n",
" # Save to HDF5\n",
" filepath = event_data.to_hdf5(\"example_output\")\n",
" print(f\"Saved to: {filepath}\")\n",
"\n",
" # Generate plots\n",
" event_data.plot_psds(\"example_output\")\n",
"\n",
" # Test loading from HDF5\n",
" print(f\"\\n=== Example 2: Loading from HDF5 ===\")\n",
" loaded_data = GWEventData.from_hdf5(filepath)\n",
" print(f\"Loaded: {loaded_data}\")\n",
"\n",
" except Exception as e:\n",
" print(f\"Error in examples: {e}\")\n",
" import traceback\n",
" traceback.print_exc()\n",
"\n",
" print(f\"\\n=== Processing all events ===\")\n",
" successful, failed = process_all_events()\n",
"\n",
"\n",
"if __name__ == \"__main__\":\n",
" main()"
],
"metadata": {
"id": "wjDTw4j1xQ4j"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [],
"metadata": {
"id": "DPDWAjzXojb7"
},
"execution_count": null,
"outputs": []
}
]
}
@avivajpeyi
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment