Skip to content

Changelog

All notable changes to the AIMBAT project will be documented in this file.

[Unreleased]

โš™๏ธ DevOps & Infrastructure

  • Add stale management workflow

โšก Performance Improvements

  • (snapshot) Backfill sequence in one window-function pass
  • (io) Bound the waveform cache with an LRU cap
  • (core,tui,utils) Stop querying for rows nobody reads

๐Ÿ› Bug Fixes

  • Set explicit permissions on workflow-calling jobs
  • Drain startup ICCS worker before TestICCSStalenessRetry asserts
  • Refresh project table after Tools-menu parameter changes
  • Refresh all TUI panels after mutations, not just the active one
  • Roll back session after failed automatic snapshot
  • Address findings from full-codebase review
  • (types) Read bare-number Timedeltas as seconds in SAPandasTimedelta
  • (types) Reject NaT in PydanticTimestamp/PydanticTimedelta
  • (core) Harden ICCS/MCCC quality writes
  • (tui) Rebuild ICCS after parameter-changing tools; crash-safe note autosave
  • (models) Enforce one note per parent record
  • (tui) Refresh every panel after a select/flip toggle
  • (db) Hold the staleness lock for the whole check, not just the flag
  • (core) Stop write_back_seismograms from committing the caller's session
  • (core) Dump_event_table always returns list[dict]
  • Address PR #256 review feedback
  • (io) Read JSON sources as UTF-8 and name the file on a parse error
  • (tui) Handle events with no seismograms without crashing
  • Batch of mechanical deep-review fixes (docs, types, dead code)
  • Correctness bugs in utils formatters and uuid_shortener
  • Small safety/UX guards across cli, core, io, app-root
  • Back up project DB before migrating, small robustness/clarity fixes
  • Real-entrypoint traceback handler, broader db_url escaping, safer sample-data download
  • Apply strict-schema-check filter lazily, document settings singleton caveat
  • (migrations) Use consistent sqlite dialect detection, clarify trigger comments
  • (models) Match server default on corners column to migration
  • (core) Guard note-target lookups, discard-pick docstring, loud ICCS field sync
  • (tui) Make overflow-prone modals scrollable, cross-reference CC-stats types
  • (core) Warn on station location mismatch when reusing an existing record
  • (cli,tui) Report converter failures consistently, warn on lost editor edits, debounce plot re-render
  • (core,cli,io) Bound the ICCS cache, document plot's DB write, note savepoint boundary on staged writes
  • (cli,core) Warn on lost note edits, guard the seismogram-params trigger
  • (core,models,plot) O(n) revision matching, trigger WHEN invariant tests, ICCS validation traceback
  • (utils) Avoid reopening sample-data tempfile by path
  • (cli,config) Sentinel table check, %-escaping, --debug ordering, editor warnings
  • (utils) Update sample-data download URL to main branch
  • (io) Name the data source and pick header in ingestion failures
  • (config) Honour min_id_length when shortening IDs
  • (plot) Evict the cached ICCS when an interactive write is rejected
  • (core) Restore snapshot quality onto trigger-modified rows
  • (cli) Count distinct entities in the data add dry-run summary
  • (core,tui) Report restores, backups and staleness accurately
  • (io,core) Read a data source once, and notice when it changes
  • (models) Say how to move the bandpass when a bound is rejected
  • (core,plot) Evict cached ICCS on rollback, let plot writes take an engine

๐Ÿ“š Documentation

  • Overhaul documentation and enforce docstring linting
  • Scope --alias flag to CLI/shell in results export docs
  • Render settings defaults via zensical macros instead of hand-typing/shelling out
  • (core) Explain the load-bearing commit order in run_mccc / run_iccs
  • Broad pass on docs
  • Broad sweep on md files
  • (snippets) Update to pysmo API changes
  • (models,core,tui) Clarify quality read-model semantics and drop duplicate error toast
  • (models,tests) Clarify sourcename uniqueness and cover migration downgrades
  • (core,models,tui,cli) Name four architectural risks in code, not just the review notes

๐Ÿ“ฆ Miscellaneous

  • [breaking] Raise Python floor to 3.13
  • Align ruff and mypy strictness with pysmo's config
  • (tui,io) Remove redundant __future__ annotations import
  • Track shared .envrc, keep machine-specific overrides local
  • Update stale master references to main
  • Migrate from uv/direnv to devenv

๐Ÿ”ง Refactoring

  • (tui) Split app.py god object, dedupe core/_iccs helpers
  • (models) [breaking] Narrow AimbatSeismogram to the pysmo Seismogram interface
  • (snapshot) Split the parameter hash into iccs_hash and mccc_hash
  • Rename aimbat._types to aimbat.types
  • (io) Treat datasource sourcename as an opaque source identifier
  • (io) Pass readers a SeismogramReadContext
  • (core) Dump event stations through the read model in as_json mode
  • (core,utils) Give the repeated core blocks one definition each
  • (cli,core) Build repeated command and trigger bodies from one place
  • (app,core) Configure logging at the entrypoints, create projects atomically
  • (core,plot) Write quality on the caller's session, free the plot window
  • (core,models) Run the ICCS parameter check in core, not in the model

๐Ÿš€ New Features

  • Auto-create a snapshot per event when data add ingests new seismograms
  • Integrate pysmo causal-filter, persist ICCS.corners, harden schema checks
  • (tui) Table-aware footer, causal toggle, and station dimming
  • (data) Add near-duplicate event detection to data add
  • (snapshot) Keep snapshots when the rows they froze are deleted
  • (snapshot) Number snapshots per event instead of by unique timestamp
  • (iccs) Separate stack-affecting changes and tighten the 1:1 links
  • (event) Add set_event_parameters for validated batch updates
  • (data) Reuse existing event within event_duplicate_tolerance
  • (core) Add direct seismogram-triple ingestion and miniSEED support
  • (io) Defer waveform writes until session commit
  • (data) Add data prune for seismograms whose source has vanished

๐Ÿงช Testing

  • Use testkit for shared pytest fixtures
  • Add old-DB regression fixture and CI migration/wheel gates
  • Parallelise the non-slow test suite with pytest-xdist
  • Write per-worker log files to gitignored tests/.logs/
  • (models) Pin count column_property attrs against their TYPE_CHECKING stubs
  • (tui) Drop timing-sensitive assertion from debounce test

2.0.0.dev0 - 2026-08-12

โš™๏ธ DevOps & Infrastructure

  • Artifact@v4
  • Use vcs versioning

๐Ÿ› Bug Fixes

  • Fix type hint
  • Fix importlib error for Python 3.7
  • Fix typo on readme
  • Listing snapshots when there were non causes error
  • Debug flag from cli commands didn't do anything
  • Force matplotlib Agg backend in tests

๐Ÿ“š Documentation

  • Correct links in badges
  • Add AIMBAT workflow
  • Link to contributros.md in root folder
  • Update data section
  • Add notebook to docs (#168)
  • Add CNAME file
  • Installation instructions using uv (#190)
  • Add asciinema
  • Switch to zensical
  • Re-arange api reference
  • Restructure usage section into workflow-based pages and TUI improvements

๐Ÿ“ฆ Miscellaneous

  • Add py312 to matrix
  • Switch to uv
  • Rename some commands to group them a bit better
  • Update to new pysmo names
  • Update deps and cleanup code
  • Move CI workflows to reusable versions in pysmo/.github

๐Ÿ” Other Changes

  • Create CNAME
  • Switch from pipenv to poetry
  • Add new aimbat cli and setup defaults framework
  • Remove old stuff and add aimbat V2 files.
  • Add github actions and initial tests for the cli
  • Don't fail-fast (i.e. continue checks for other python versions)
  • Add command to download sample data
  • Use descriptors for defaults
  • Cleanup aimbat defaults class
  • Add checkdata command
  • Rename package from pysmo.aimbat to aimbat (#129)
  • Setup docs structure (#130)
  • Cleanup defaults script
  • Add cli for project
  • Switch to using sqlmodel to save project metadata.
  • Add devcontainer config
  • Add .tox and nohup.out to gitignore
  • Add autodoc to docs (#134)
  • Update Readme
  • Fix text alignment
  • Add accent colour to theme and add watch directory to make live-docs
  • Add logging (#189)

๐Ÿ”ง Refactoring

  • Add id column to default table
  • Split lib and cli files to speed up cli (#170)
  • Move AimbatDefaults class to other models and rename some things.
  • Save active event in a single row table
  • Move defaults directly to model instead of the yaml nonsense
  • Use more classes for tests (#192)
  • Rely on pydantic for validation instead of doing it manually (#193)
  • Use uuid as datbase id instead of int
  • Use window_pre and window_post as defaults instead of the whole timewindow
  • Better relationships between tables
  • Use env vars for defaults
  • Single uuid function for all classes
  • Make data reading more modular
  • Move aimbat source to src directory
  • Use pandas Timestamp and Timedelta
  • Improve docstrings, io DI pattern, and data source terminology
  • (core) Re-arange core, move set_default_event and friends out of core.
  • Active event -> default event
  • Use default event concept only for cli commands
  • Update plot seismograms.
  • Remove dead code (#231)
  • Quality stats integrated into read models and tui
  • Quality stats integrated into read models and tui (#232)
  • Tighten note constraint, consolidate formatters, improve TUI staleness handling
  • Split TUI panels into own module and unify duplicated logic

๐Ÿš€ New Features

  • Initial checks in checkdata lib
  • Add-data to project
  • List data
  • Add parameters to data
  • Add parameter snapshots
  • Add plotseis
  • Add pyqtgraph plot option (#165)
  • Add icecream to print debug information
  • Add event select function and cli command
  • Switch to typer (#172)
  • Print table data for active events by default
  • Add snapshot rollback
  • Add enum types for Event and Seismogram parameters
  • Add initial iccs functionality (#185)
  • Add plot command group
  • Add time window picker
  • Add iccs ccnorm selector
  • Use a trigger to ensure only one event can be active
  • Update cli and lib to use new iccs options
  • Add ability to delete seismograms, events, and stations from project
  • Use pydantic-settings
  • Add dump option to main tables
  • Add simple errors to cli
  • Use channel and location in station table
  • Use pysmo defaults for ICCS
  • Add bandpass filtering (#214)
  • Add mccc
  • Add in-memory seismogram data cache
  • Add JSON datasource
  • Add TUI and supporting changes
  • Implement interactive shell and major documentation update for v2
  • Store ICCS/MCCC quality metrics in database
  • Add JSON export functionality for snapshot results
  • Add Alembic-based schema migrations

๐Ÿงช Testing

  • Add test data for 3 events instead of just a single sac file
  • Add integration and functional test suite (#218)

aimbat-v1.0.7

Sep 6, 2021

  • Bug fixes.

aimbat-v1.0.5

Aug 18, 2019

Main contributor: smlloyd, xlougeo.

  • Lots of code clean and restructure, including src, docs, and tests.
  • Package installation: make fortran optional, update dependencis, update travis, setup pipenv.
  • Update documentation.
  • Bug fixes.

aimbat-v1.0.4

Dec 23, 2018

  • Add SAC P1 Button to the main GUI
  • Plot only a subset of traces for faster data QC and (de)selection. All labels are plotted. Add a button to plot more traces

aimbat-v1.0.3

Dec 7, 2018

  • Some GUI setting changes

aimbat-v1.0.2

Dec 5, 2018

  • Add option to plot simple delay time map by matplotlib.pyplot

aimbat-v1.0.1

Dec 4, 2018

  • Fix bugs in changing trace selection status (QC), manual phase picking, and trace label.
  • Change in GUI settings. Using right button dragging is enough and give up on QScrollArea.
  • In cross-correlation, do not allow reverse polarity which causes cycle skipping too often.

aimbat-v1.0.0

Dec 3, 2018

Main contributor: smlloyd:

  • Use new pysmo.core.sac.SacIO (pysmo-pysmo-v0.7.0) instead of pysmo.sac.sacio.SacFile
  • New setup.py:
  • Wrap all scripts into a callable function and add them to entry_point, e.g., aimbat-ttpick is automatically generated in your bin folder.
  • Use git commit/tag to determine version automatically.
  • Setup travis
  • Package uploaded to pypi.org for each release since this.

Main contributor: xlougeo, ASankaran:

  • SAC plotting and aimbat-ttpick are still using Matplotlib GUI.
  • New GUI (aimbat-qttpick) using pyqtgraph for fast plotting. Similar user interactions as v0.3:
  • Key pressed event handler in pyqtgraph is redefined
  • Use mouse to change time window and press key 'w' to set <-- work on stack only
  • Press key 't[0-9]' to set time picks like SAC PPK <-- work on both stack and traces
  • Mouse click on waveform to change trace selection status <-- work on trace only
  • Better separation between data and plot.
  • Filter and sort are both in the main GUI controlled by a parameter tree.

aimbat-v0.3-alpha1

June 3, 2018

Main contributor: xlougeo

  • Upgrade to python3 (May not back-compatible with python2). No change in functionalities from v0.2.

aimbat-v0.2

Main contributor: lkloh

For changes made between Dec 19, 2012 (v0.1.2) and Aug 23, 2016:

  • Added a warning button if you hit ICCS-A or ICCS-B button, to make sure do did not hit it by accident.
  • Hitting one of those buttons will undo all the work you did in manually picking arrival times.
  • Added a button to allow you to jump to the front page. Note that hitting MCCC again will do just that.
  • Added a summary of the event at the top right hand corner: Magnitude, Location, Depth
  • Added a GUI to allow sorting of the seismograms according to header, time difference, file name, ...
  • Added a button to return to original screen after you zoom in/out

aimbat-0.1.2

Dec 19, 2012

Main contributor: xlougeo

  • Change sci format for scientific notation of sacp2: from 1e-5 to 10^{-5}
  • Change font properties for station label to "monospace" for equal width
  • Minor changes in program descriptions, example scripts
  • Further code development on github.com after this version.

aimbat-0.1.1

Sep 27, 2012

Main contributor: xlougeo

  • Change setup.py and package directory: modules --> src/pysmo/aimbat.
  • AIMBAT becomes a part of pysmo (https://github.com/pysmo/aimbat).
  • Python usage: import aimbat --> from pysmo import aimbat
  • Minor changes in help messages for scripts using the OptionParser module.
  • Adjust figsize-related function of ttpick.py to support backends other than Tk.

aimbat-0.1

Sep 19, 2012

Main contributor: xlougeo

First release on Northwestern website <https://www.earth.northwestern.edu/~xlou/aimbat.html>_