From 3b82163a444fd9214884bbca59e713095cccb30b Mon Sep 17 00:00:00 2001 From: Iahn Cajigas Date: Tue, 10 Mar 2026 00:34:18 -0400 Subject: [PATCH 1/2] Align README with MATLAB repo: extended description, SSGLM, cross-refs - Add three extended description paragraphs matching MATLAB README (key strengths, generic applicability, open-source contribution invite) - Expand Paper-Aligned Toolbox Map with SSGLM workflow (Section 2.4), decoding details (Sections 2.5-2.6), and signal processing methods - Add MATLAB Toolbox section mirroring MATLAB repo's Python port section - Reorganize Data and Related Repositories to list Figshare/DOI first - Fix missing blank line before Documentation heading Co-Authored-By: Claude Opus 4.6 --- README.md | 61 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 52 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 7cf0d8d5..7310b484 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,22 @@ decoding. In addition to point-process algorithms, nSTAT also provides tools for Gaussian signals — from correlation analysis to the Kalman filter — applicable to continuous neural signals such as LFP, EEG, and ECoG. +One of nSTAT's key strengths is point-process generalized linear models for spike +train signals that provide a formal statistical framework for processing signals +recorded from ensembles of single neurons. It also has extensive support for model +fitting, model-order analysis, and adaptive decoding — including state-space GLM +(SSGLM) estimation via EM, unscented Kalman filtering (UKF), and hybrid +discrete/continuous point-process filters. + +Although created with neural signal processing in mind, nSTAT can be used as a +generic tool for analyzing any types of discrete and continuous signals, and thus +has wide applicability. + +Like all open-source projects, nSTAT will benefit from your involvement, +suggestions and contributions. This platform is intended as a repository for +extensions to the toolbox based on your code contributions as well as for flagging +and tracking open issues. + [![test-and-build](https://github.com/cajigaslab/nSTAT-python/actions/workflows/ci.yml/badge.svg)](https://github.com/cajigaslab/nSTAT-python/actions/workflows/ci.yml) [![pages](https://github.com/cajigaslab/nSTAT-python/actions/workflows/pages.yml/badge.svg)](https://github.com/cajigaslab/nSTAT-python/actions/workflows/pages.yml) @@ -129,6 +145,7 @@ These smaller demos remain useful as quick install and plotting checks. | Multitaper spectrum + spectrogram | `python examples/readme_examples/example1_multitaper_and_spectrogram.py` | [PNG](examples/readme_examples/images/readme_example1_multitaper_and_spectrogram.png) | | Simulated CIF spike train | `python examples/readme_examples/example2_simulate_cif_spiketrain_10s.py` | [PNG](examples/readme_examples/images/readme_example2_simulate_cif_spiketrain_10s.png) | | Spike-train raster | `python examples/readme_examples/example3_nstcoll_raster_from_example2.py` | [PNG](examples/readme_examples/images/readme_example3_nstcoll_raster.png) | + ## Documentation - Docs home: [cajigaslab.github.io/nSTAT-python](https://cajigaslab.github.io/nSTAT-python/) @@ -147,16 +164,28 @@ Source pages: ## Paper-Aligned Toolbox Map -The Python port now mirrors the MATLAB repo's paper-aligned toolbox map through -[docs/PaperOverview.md](docs/PaperOverview.md). That page ties the Python -toolbox to the 2012 paper's workflow categories: +To keep terminology and workflows consistent with the 2012 toolbox paper, +the documentation includes a dedicated mapping page: +[docs/PaperOverview.md](docs/PaperOverview.md). + +This page ties the Python toolbox to the paper's workflow categories: -- class hierarchy and object model (`SignalObj`, `Covariate`, `Trial`, +- Class hierarchy and object model (`SignalObj`, `Covariate`, `Trial`, `Analysis`, `FitResult`, `DecodingAlgorithms`) -- fitting and assessment workflow (GLM fitting, diagnostics, summaries) -- simulation workflow (conditional intensity and thinning examples) -- decoding workflow (univariate, bivariate, and history-aware decoding) -- example-to-paper section mapping via `nSTATPaperExamples` +- Fitting and assessment workflow (GLM fitting, diagnostics, summaries) +- Simulation workflow (conditional intensity and thinning examples) +- State-space GLM (SSGLM) workflow — full EM algorithm (`PPSS_EMFB`) + for across-trial coefficient dynamics with forward-backward Kalman + smoothing (Section 2.4) +- Decoding workflow — point-process adaptive filter (`PPDecodeFilterLinear`), + hybrid filter (`PPHybridFilterLinear`), unscented Kalman filter (`ukf`), + and stimulus confidence intervals (Sections 2.5–2.6) +- Signal processing — multi-taper spectral estimation (`MTMspectrum`), + spectrogram, cross-covariance, and peak-finding methods +- Example-to-paper section mapping via `nSTATPaperExamples` + +If you use nSTAT in your work, please remember to cite the above paper in any +publications. ## Developer notes @@ -187,6 +216,20 @@ PMID: 22981419 ## Data and Related Repositories -- **Matlab toolbox**: https://github.com/cajigaslab/nSTAT - **Paper-example dataset (Figshare)**: https://doi.org/10.6084/m9.figshare.4834640.v3 - **Paper DOI**: https://doi.org/10.1016/j.jneumeth.2012.08.009 + +The code repository for the Python port of nSTAT is hosted on GitHub at +https://github.com/cajigaslab/nSTAT-python. + +## MATLAB Toolbox + +The original MATLAB nSTAT toolbox lives in a separate repository: + +- https://github.com/cajigaslab/nSTAT + +That repository is MATLAB-focused and retains: + +- Original MATLAB class/source files +- MATLAB helpfiles and help index (`helpfiles/helptoc.xml`) +- MATLAB example workflows, including `.mlx` examples From be909722614ed2f9a62dd5dc739898afc7e404f9 Mon Sep 17 00:00:00 2001 From: Iahn Cajigas Date: Tue, 10 Mar 2026 00:40:57 -0400 Subject: [PATCH 2/2] Fix trailing blank line that broke readme-examples test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove extra blank line before ## Documentation that caused test_readme_examples_block_matches_generator to fail — the extracted examples block must match the generator output exactly. Co-Authored-By: Claude Opus 4.6 --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 7310b484..ba1ddbd7 100644 --- a/README.md +++ b/README.md @@ -145,7 +145,6 @@ These smaller demos remain useful as quick install and plotting checks. | Multitaper spectrum + spectrogram | `python examples/readme_examples/example1_multitaper_and_spectrogram.py` | [PNG](examples/readme_examples/images/readme_example1_multitaper_and_spectrogram.png) | | Simulated CIF spike train | `python examples/readme_examples/example2_simulate_cif_spiketrain_10s.py` | [PNG](examples/readme_examples/images/readme_example2_simulate_cif_spiketrain_10s.png) | | Spike-train raster | `python examples/readme_examples/example3_nstcoll_raster_from_example2.py` | [PNG](examples/readme_examples/images/readme_example3_nstcoll_raster.png) | - ## Documentation - Docs home: [cajigaslab.github.io/nSTAT-python](https://cajigaslab.github.io/nSTAT-python/)