feat(scripts): backfill events.shape_* from .h5 samples
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
from __future__ import annotations
|
||||
import numpy as np, h5py
|
||||
|
||||
from sfm.database import SeismoDb
|
||||
from sfm.waveform_store import WaveformStore
|
||||
from scripts.backfill_event_shape import backfill_shape
|
||||
from minimateplus.models import Event
|
||||
|
||||
|
||||
def _h5(path, long):
|
||||
with h5py.File(path, "w") as f:
|
||||
g = f.create_group("samples")
|
||||
for k in ("Tran", "Vert"):
|
||||
g.create_dataset(k, data=np.zeros(1024, "float32"))
|
||||
g.create_dataset("Long", data=np.asarray(long, "float32"))
|
||||
|
||||
|
||||
def test_backfill_updates_shape_and_is_idempotent(tmp_path):
|
||||
db = SeismoDb(tmp_path / "s.db")
|
||||
store = WaveformStore(tmp_path / "waveforms")
|
||||
ev = Event(index=0)
|
||||
ev._waveform_key = bytes.fromhex("0111abcd")
|
||||
db.insert_events([ev], serial="BE1",
|
||||
waveform_records={ev._waveform_key.hex():
|
||||
{"filename": "F.CE0W", "filesize": 10}})
|
||||
# place the .h5 where store.paths_for expects it
|
||||
long = np.zeros(1024); long[100] = 0.48
|
||||
_h5(store.hdf5_path_for("BE1", "F.CE0W"), long)
|
||||
|
||||
c1 = backfill_shape(db, store)
|
||||
assert c1["updated"] == 1
|
||||
row = db.query_events(serial="BE1")[0]
|
||||
assert row["shape_axis"] == "Long" and row["shape_near_peak_count"] <= 3
|
||||
c2 = backfill_shape(db, store) # idempotent: re-run overwrites same values
|
||||
assert db.query_events(serial="BE1")[0]["shape_crest_factor"] == row["shape_crest_factor"]
|
||||
Reference in New Issue
Block a user