Note

This page was generated from a Jupyter Notebook. Download the notebook (.ipynb)

Case Study: Event Synchronized Analysis

This tutorial shows a real-world workflow: matching events from two different logs, applying clock corrections, and generating event-by-event summary plots.

[ ]:
import pandas as pd
from gwpy.segments import Segment
from gwexpy.table import SegmentTable

# 1. Simulate finding events
events_df = pd.DataFrame({
    "gps": [1234567890.1, 1234567895.5, 1234567900.2],
    "snr": [15, 8, 22]
})

# 2. Create SegmentTable from events
# Define a 4-second window around each GPS time
segs = [Segment(t-2, t+2) for t in events_df["gps"]]
st = SegmentTable.from_segments(segs, snr=events_df["snr"])
st

Batch Plot Generation

We can use apply() to generate plots for each event and save them, storing the paths back in the table.

[ ]:
import os
os.makedirs("outputs", exist_ok=True)

def generate_event_plot(row):
    # Simulate plotting
    path = f"outputs/event_{row.index}.png"
    # plot = row["raw"].plot() -> plot.save(path)
    with open(path, "w") as f: f.write("Dummy PNG")
    return {"plot_path": path}

st_plots = st.apply(generate_event_plot)
st_plots.display()

Result Summary

Finally, we can filter the table and export results.

[ ]:
st_best = st_plots.select(mask=st_plots.to_pandas()["snr"] > 10)
st_best.to_pandas()