Changelog
All notable changes to radiens-qc will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
no unreleased changes
[0.0.3] - 2026-10-12
Requires radiens-core 0.1.0 and a recent Radiens server.
Added
- Figure functions, each returning one
Figure:plot_site_maps,plot_channel_profiles,plot_metric_over_time,plot_signal_integrity, andplot_stabilityfor aQualityReport;plot_raw_tracesandplot_raw_spectrafor raw signal;plot_event_rasterfor threshold crossings;plot_unit_footprints,plot_unit_yield,plot_unit_raster, andplot_unit_inventoryfor sorted units. - A figure registry:
FIGURES,select(),fetch_figure_sources(),render(), andsave_figures(), withRenderOptions. A figure whose source is not supplied is skipped, so thechannelandrecordinglevels can be drawn from a saved report directory. fetch_raw_signal(): wideband and filtered excerpts at 10/50/90% of the recording, plus whole-file spectra. Recordings under 10 s raiseValueError.fetch_events(): every threshold crossing from a detect-only spikes fileset the caller names.fetch_units()andfetch_unit_waveforms(): the units from a sorted fileset the caller names, withSortedUnits.amplitudes_uv()measured from the mean waveforms.check_crossings_fileset()andcheck_units_fileset()to validate a caller's fileset, andPER_CHANNEL_NEIGHBORS. The package never runs a sort itself.compute_or_load_report(): loads a saved report when the dataset anddetectionmatch, or recomputes withforce=True.report_cache_key()andcached_key()expose the key.window_sec,metrics, andchannelsare not in the key.load_report(thresholds=...)regrades a saved report.compute_report(channels=...): thentv_idxvalues to analyze. Defaults to every channel.QualityReport.noise_cutoff_uv(),ap_band_rms_uv(),crest_factor(),in_event_fraction(),depth_order(), andshank_ids().event_mean_max_absinDEFAULT_METRICS, andAMPLITUDE_METRIC.
Changed
- Channels carry an
integritygrade (ok/noisy/dead) and aneventsstate (present/absent) instead of one SNR-drivenqualitytier. A channel with no detected events is no longer gradeddead. Useintegrity_counts()andevent_counts()instead ofquality_counts(). noisyflags a channel whose noise floor is an outlier against the rest of the probe.QualityThresholdsreplacessnr_goodandsnr_fairwithnoisy_mad_multiplierandnoisy_scale_floor_frac, and gainsap_band_rms_max_uv.compute_report()takes onedetection=DetectionSettings(...)instead ofdsp_paramsandevent_threshold_sd, as dofetch_raw_signal(),fetch_events(), andfetch_figure_sources().QualityReport.detectionandRawSignal.detectionrecord what was applied.- Renamed
apply_kpi_preprocessing()toapply_detection_settings(), which returns what it applied;DEFAULT_EVENT_DSPtoDEFAULT_DSP; andDEFAULT_EVENT_THRESHOLD_SDtoDEFAULT_THRESHOLD_SD. compute_report()selects the channels it analyzes on the datasource and leaves them selected. Previously the channel count depended on whatever was selected in the desktop app. It raisesValueErrorif the server returns a different channel set.window_secdefaults to the dataset's native KPI packet duration instead of 10 s, and is rounded to a multiple of it. A trailing window under half width is dropped.load_report()regrades the channel table instead of reading grades back fromchannels.csv.save_report()writes the whole-recording readings tometa.jsonand no longer draws figures.noise_scale_max_uvdefaults to 20 µV instead of 15.
Removed
plot_report()andplot_report_panels(), and thefigure,panels, anddpiarguments ofsave_report(). Use the individual figure functions orsave_figures().radiens_qc.compare.screen_dataset(). Filter recordings before callingcompute_report().QualityReport.grade()and thegradekey inmeta.json.QualityReport.rank_orderandQualityReport.mean(). Usedepth_order(), andsummary_stats()for the mean.SCHEMA_VERSION.load_report()no longer reads report directories from earlier versions.time_series.csv.matrices.npzholds the same data.
Fixed
snrno longer depends onwindow_sec. It is now the mean event peak over the noise floor instead of the largest, so values are lower and a report may grade differently.
[0.0.2] - 2026-07-20
Fixed
- documentation updates
[0.0.1] - 2026-07-20
First release.
Added
compute_report— screens a recording, applies read-time DSP, walks it in windows, and grades every channel. Accepts a localPath(linked idempotently) or an already-linkedDatasetMetadata, so the package never needs to know where recordings are stored.screen_dataset— cheap metadata checks (duration, placeholder probe, wall clock window) to skip junk recordings before paying for a KPI compute.apply_kpi_preprocessing/resolve_dsp_params/amp_ports— read-time DSP configuration using radiens-nativeFlexDSPParams.plot_report/plot_report_panels— pure figure builders returning matplotlibFigureobjects.save_report/load_report— the report-folder format, includingschema_versionand losslessmatrices.npz.radiens_qc.compare— cross-session comparison built from saved report folders (SessionSummary,ComparativeReport,load_session_summaries,plot_comparative_report,save_comparative_report).
Compatibility
load_reportandload_session_summariesread pre-schema_versionreport folders, including ones that spellsourceasdrive_path. Those load with emptymatrices, which blanks the temporal panels rather than failing.