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
mainbranch - (io) Name the data source and pick header in ingestion failures
- (config) Honour
min_id_lengthwhen 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
masterreferences tomain - 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>_