NEWS
iSTATS 1.8 (2026-10-10)
New features
- Added a pure R implementation of icoshift for one-dimensional spectral
alignment, exposed through icoshift() and integrated into the pre-treatment
screen with editable ppm intervals.
- Added deterministic suggestions of alignment regions from the imported
spectra, with sensitivity and optional spectrometer-frequency controls,
plus an auditable plot and table before manual review.
- Added distinct automatic and manual/assisted alignment workflows. Automatic
mode detects and aligns atomically in one action; assisted mode supports
text review plus graphical add/remove editing and records the regions
actually applied.
- Added a dedicated top-level Alignment section so the alignment workflows
are no longer hidden inside Normalize Selection.
- Alignment can now use the average spectrum or any imported sample as its
reference. Sample rows are selected by index, repeated names remain
unambiguous, and both automatic and assisted workflows always obtain the
target from the immutable imported matrix.
- The Alignment section now precedes Select and shows the imported and the
aligned spectra in two comparison panels with shared regions, synchronized
zoom/pan, a reset action and balanced or maximized layouts.
- Select Signals has a "Suggest regions" icon button (name and help in its
tooltip). It runs the alignment-region
detector on the current spectra (with the detection settings of the
Alignment page), outlines the proposed regions in blue on both panels and
lists them as editable text; "Load suggested regions" adds them to the
selection like the save button, skipping any that overlap a loaded region.
- The alignment comparison and Plot Spectra are now drawn on the server as
images from a per-pixel minimum/maximum envelope of the full matrix, with
brush zoom, double-click reset, pan/zoom-out buttons, a hover label naming
the sample, ppm and intensity, and click-to-highlight (or pin) on the curve.
Zoom responses fell from about 6 s and 5 MB per panel to under 0.6 s and
about 150 KB, and 'plotly' is no longer a dependency. Clicking a
highlighted curve (or empty space) clears the highlight, and an "Edit
regions" mouse mode lets the typed ppm intervals be resized, moved,
added or removed directly on both panels, keeping the text box in sync.
After an alignment, each changed endpoint shows its current value first and
keeps the original applied value in parentheses; text and mouse edits update
the blue proposal without recomputing spectra, and only the alignment action
promotes it. An edited region loses its obsolete green outline, while new
regions are blue-only and removed regions remain green-only until that
action. The region audit compares original and new positions side by side.
The imported matrix is kept separately (cached to a session temporary file for very
large inputs), so repeated alignments never accumulate shifts.
- Added package and application documentation for the alignment workflow,
parameters, return values, limitations and reference.
Improvements and fixes
- Closing iSTATS now leaves the caller's R session unchanged. Application
variables are isolated per Shiny session, temporary package attachments and
the upload-size option are restored, and the caller's random-number state
and global objects are preserved.
- CSV imports now detect a trailing chemical-shift discontinuity across the
individual sample axes. While any final ppm value is greater than its
predecessor, the importer counts and removes that trailing column from both
the axes and intensity matrix, and reports the number of removed columns.
- Alignment, Plot Spectra and Select Signals now frame the visible spectral
baseline near 10% above the lower panel edge. A deterministic pooled 0.1%
lower quantile prevents isolated acquisition artefacts from leaving the
useful spectrum floating in the middle, while the real maximum remains in
view. Select Signals also keeps its plot ranges separate from pre-treatment
state, so imports and zooms in another screen cannot overwrite its frame.
- The application now resolves the alignment engine from the package namespace,
so alignment does not depend on attaching 'iSTATS' to the app environment.
- Reduced peak-selection memory use by avoiding the full point-by-point
correlation matrix and streamlined the STOCSY server calculations.
- STOCSY now ranks the selected points once when it starts and reuses those
ranks for every Spearman correlation, instead of re-ranking the whole matrix
on each hover or click. Correlation values are unchanged.
- The Shapiro-Wilk check run when STOCSY or a normalization starts now tests
all selected points at once, and the Spearman ranks are computed in one
pass, instead of one R call per point. Results are identical to
shapiro.test() and rank(); on 64K-point data the check fell from about
12 s to 0.5 s.
- The STOCSY-I, STOCSY-IS and STOCSY-RT plots and both Select Signals panels
are drawn in base graphics from a per-pixel envelope, like the Alignment
panels, instead of ggplot. Correlated points keep their colours (red
positive, green negative); selected points are shaded red in Select
Signals. On 175,380-point data a STOCSY-RT hover fell from about 4 s to
0.6 s and opening STOCSY from 16.7 s to 6.6 s. The point recolouring that
follows every cutoff, mode, click or hover is vectorized with identical
results.
- The x2/x8 and /2 and /8 intensity buttons of Select Signals now also scale
the Overlap view (previously they only acted on the Average spectrum).
Server code for the combined "PearSpear" correlation mode, unreachable
since iSTATS 1.3 removed it from the interface, was deleted.
- STOCSY colours no longer depend on which classes happen to be present
(ggplot assigned the palette in order, so a plot without positive
correlations showed uncorrelated points in red). STOCSY-RT now applies the
horizontal part of a brush zoom, which it previously ignored. STOCSY plot
downloads draw the plot they belong to (they saved the last ggplot drawn),
and the STOCSY-IS download uses its own file type and name.
- The normality notice shown when STOCSY or a normalization starts now
reports the share of selected points that the Shapiro-Wilk test does not
reject as normal (p > 0.05). Before, it counted the rejected points as
"normalized" (98.28% on the 64K example instead of 1.72%). The notice no
longer offers to normalize the selection; the green/red marks in Normalize
Selection follow the corrected rule.
- Prevented STOCSY-I correlation-mode events from reading cutoff values before
the range slider has initialized in a new browser session.
- Corrected automatic vertical framing in STOCSY-I, STOCSY-IS and STOCSY-RT.
The limits now follow the trace actually drawn, including negative or nearly
constant spectra, and reserve 10% of the panel below its minimum while
preserving user-selected zoom until an explicit reset or sample change.
- Preserved the joint order of sample metadata and spectra during ASC and CSV
imports, including TopSpin 3.6 and 4.5 ASC exports.
- Added sample identifiers and consistent labels to point and area downloads.
- Area (bucket) downloads in Select Signals and Normalize Selection now work
with a single selected region, instead of failing and asking for more than
one. Deleting a region now also removes its area column, so later downloads
stay aligned with the remaining regions, even after STOCSY or a point
download reordered the selected points. Adding regions no longer duplicates
the selected chemical shifts used by STOCSY and the normalization methods,
and the delete handlers are registered once instead of once per selection.
- Restored the higher-resolution home-page animation from iSTATS 1.3.
- Made spectral alignment updates atomic and preserved matrix dimensions,
sample names and the chemical-shift axis.
- Region selection now responds as soon as the mouse button is released.
The brush handlers on the pre-treatment, signal-selection and three STOCSY
screens carried a five-second debounce inherited from 1.7, so every
selection was followed by a five-second wait before the panel reacted.
- CSV imports now verify that every selected file has both a chemical-shift
and an intensity column before any sample name, axis or spectrum is
written. A file with a single column used to abort the import halfway,
after the session state had already been replaced; the affected file names
are now reported and nothing is changed.
- Corrected package metadata and declared imports used by the R code.
- Raised the per-file upload limit from 100 MB to 500 MB, so an RData
matrix with a full 256K-point spectral axis can be imported. Individual
ASC/CSV sample files were already far below the previous limit.
Quality assurance
- Added eleven small, reproducible regression tests for icoshift modes and
helpers, automatic regions, the CSV/Shiny alignment flow, STOCSY
observers, session isolation, the server-rendered spectra plots and the
Select Signals region workflow.
- Validated the R alignment against MATLAB references at 16K, 32K and 64K
resolutions, with identical aligned matrices and shift indices.