no_peak
CLUSTER pulse detection for endocrine time-series data, in the browser. Load a series of hormone concentrations (LH, GnRH, GH, or any pulsatile analyte), set the window sizes and t-score thresholds, and get the detected pulses, the peak and valley tables, and a publication-grade figure.
The data never leaves your machine. There is no backend and no upload step: the algorithm is compiled into the page and runs on your own device, so a recording you analyze here is never transmitted anywhere. No analytics, no accounts, no cookies.
What it is
A faithful port of CLUSTER, the pulse-detection algorithm for endocrine time series developed by Johannes D. Veldhuis and Michael L. Johnson (Am J Physiol 1986; 250:E486–93). CLUSTER slides a pooled t-test across the record, comparing a trailing nadir window against a leading peak window, and assembles the significant increases and decreases into pulses. It is not a new algorithm and not a variant: the aim is that this page returns exactly what the reference implementations return.
Two implementations ship side by side, selectable in the UI: Igor, a port
of the Igor Pro ClusterMaster package used in the Moenter lab, and
Fortran, a port of Johnson's original CLUST5 v6.01 console program. They
differ in the form of the pooled variance and in the pulse-assembly loop bounds, and the
switch exists so results from either lineage can be reproduced.
How it was validated
- Against Igor Pro: 15 runs spanning every error model, asymmetric windows, and threshold combination were executed in Igor and diffed point by point — error array, up flags, down flags, pulse array, t-score trace. 75 of 75 checks pass.
- Against the original Fortran: CLUST5 v6.01 was compiled with gfortran and run on the same input. At the documented defaults the port reproduces it exactly: all 96 up flags, all 96 down flags, the full pulse array, and all 17 peaks including position, width, height, area, and percent increase.
- Against known ground truth: scored on Johnson's own simulated datasets, which ship with their generating pulse times, the Fortran variant recovers 60.8% of 130 true pulses with zero false positives — closely matching the ~58% Johnson published for Cluster on the same data. Last re-derived 2026-08-12, reproducing the published per-dataset counts exactly. Johnson's datasets cannot be redistributed, so this remains the one check on this page that a reader cannot re-run from the repository alone.
- 194 unit tests, including t-statistics worked out by hand.
What it does not do
CLUSTER is a specific, conservative detector, and this page reports it honestly rather than flattering it. On dense pulse trains it produces almost no false positives, but it misses roughly 40% of true pulses; deconvolution methods such as AutoDecon recover ~98% on the same data. Measurement against a purpose-built simulator also showed that CLUSTER's celebrated near-zero false-positive rate is partly a property of the benchmark: on sparse records the same code produces a 16–22% false-discovery rate. Use CLUSTER when you need to defend every pulse you report; use deconvolution when you need to count them.
Analyzing a whole study, or reading this without a browser? The
algorithm has no interface dependencies and ships with a command line: point
scripts/cluster.ts at a directory of records and it writes one summary row
per record — the same per-record table this app exports, from the same code. The source
is at github.com/syncytium2/no_peak
(MIT), the recipe is at Methods § Batch processing, and
AGENTS.md in the repository is the version written for an agent rather than
a person.
The full account — how the algorithm works, the provenance of the port, the caveats above in detail, and the references with DOIs — is on the Methods & Algorithm Reference, a standalone page that needs no JavaScript. The same material, plus the file-format guide and a contact form, is on the in-app About page. A plain-text summary lives at /llms.txt.
By the same author: Colonel Kernel — a client-side convolution / deconvolution tool for calcium imaging that recovers the calcium-indicator kernel from ground-truth spike times and a measured dF/F₀ trace, and reports honestly whether a clean kernel exists at all. Same no-backend, data-never-leaves-your-machine posture as this page.
Loading the interactive app… it requires JavaScript.