Changelog

Release 1.2.0

2026-06-08

  • Support for 3.0.0 and 3.2.0 schema RSK files with new table structure and multi-schedule

  • Stricter derive-dependency policy: derive methods no longer silently auto-derive an all-NaN dependency. A required channel that exists but is entirely NaN (e.g. sea pressure or salinity) now raises ValueError instead of being overwritten. An absent sea pressure channel is still auto-derived (via deriveseapressure with default atmospheric pressure) but now emits a UserWarning. Salinity is never auto-derived; an absent or all-NaN salinity channel raises. On 3.0.0+ files (where derived columns are pre-created as all-NaN), derive in order: deriveseapressure then derivesalinity then salinity-dependent derives (derivesoundspeed, derivesigma, deriveSA, derivetheta, derivebuoyancy, deriveO2).

  • Fixed multi-schedule cross-fill (getrefdataset/filldataset): the reference dataset is now built from rows where any requested channel is non-NaN and is forward-filled per channel, so derivations whose inputs live on different schedules (e.g. deriveO2 saturation, where O2 is on one schedule and temperature on another) are populated instead of all-NaN

  • Added pyrsktools.routines, a package of standalone array-in / array-out processing functions. Each routine lives in its own versioned file with its own __version__, depends only on the standard scientific stack, and can be lifted into another project unchanged.

  • Added the correcttempADCcal routine, which removes the periodic once-per-minute A2D self-calibration outliers from a temperature series, and the matching RSK.correcttempADCcal post-processor, which adds a temperature_corrected channel inheriting the source temperature channel’s instrument type and units. On files with no confirmable self-cal signature it makes no change and returns the series unchanged (no error, matching correcthold), rather than fabricating a correction.

  • Added RSK2RSKFULL for exporting full 3.0.0+ schema RSK files (supports both v3.0.0 and v3.2.0 schemas)

  • Added a demo Jupyter notebook for basic usage demonstration

  • Temperature channels are now renamed to descriptive names based on their sensor type (e.g., conductivity_cell_temperature, pressure_gauge_temperature) instead of generic temperature2, temperature3

  • Updated RSK2RSK behaviour to handle different RSK schemas

  • Use instrumentChannel.channelOrder as the canonical mapping between channels and data columns, falling back to channelID when absent

  • RSK.addchannel gained an optional shortName parameter, so a derived channel can take its source channel’s instrument type instead of the generic count default.

  • Channels added in memory (e.g. via RSK.addchannel or the correcttempADCcal post-processor) are now written to instrumentChannels and ranging with a label on RSK2RSK export, so Ruskin shows them under their display name (e.g. temperature_corrected as “Temperature Corrected”) instead of hiding the channel or showing it as “Temperature”

  • Removed internal hybridmode / hybriddata parameters from the public RSK.getprofilesindices signature; the cross-schedule indexing path used by plotprofiles now lives in a private helper

  • alignchannel now supports lagunits="seconds"

  • plotprofiles uses scatter plots instead of line plots for better multi-schedule visualisation

  • Added showLegend and referenceThreshold options for plot functions

  • RSK.deriveO2 unit parameter now accepts either upper or lower case

  • Updated RSK.deriveBPR to include updated channel lists

  • Fixed RSK2RSKFULL to produce Ruskin-readable RSK files (schema-aware channel/data table writes, globally unique data row IDs, downsample cache cleanup)

  • Fixed RSK.computeprofiles assigning a duplicate regionID to the trailing single cast of a deployment that ends mid-profile (unequal up/down cast counts), which crashed RSK2RSK export with a UNIQUE-constraint IntegrityError

  • Fixed RSK.deriveBPR crashing on multi-schedule files: it now passes channel longName strings (not Channel objects) to the cross-fill helpers, so the BPR pressure/temperature columns are matched instead of dropped

  • Fixed RSK.centrebursttimestamp raising “This method only applies to wave data” on genuine burst files: a v3.x BURST schedule carries BurstInfo rather than WaveInfo, so the method now resolves the single wave/burst schedule and accepts either

  • Fixed RSK2CSV not writing profiles for the second and later schedules of a multi-schedule file, where the per-profile loop variable shadowed the direction argument and raised “Invalid cast direction: u”

  • Fixed RSK2RSKFULL raising sqlite3.ProgrammingError when an RSK has a geodata region, by writing the 5th regionGeoData column (source) the 3.0.0 schema expects

  • Fixed opening older-schema RSK files (roughly 2.0.0 through 2.18.x) that raised sqlite3.OperationalError: no such column for region.collapsed or regionPlateau.refUnit; RSKFullReader now introspects the real tables and drops any requested column the file’s schema does not expose

  • Fixed derivetheta and derivesigma raising no field of name absolute_salinity when reusing an existing Absolute Salinity channel on multi-schedule files

  • Improved the stability of RSK.computeprofiles and profile detection

  • Fixed RSK.trim removing incorrect profile indices

  • Fixed region profile order being read/calculated incorrectly

  • Fixed channels’ derived status being processed improperly

  • Fixed deriveSA not recognising latitude and longitude at 0

  • _despike made NaN-safe using np.nanstd and finite masks

  • Fixed plotdata cast direction display

  • Fixed alignchannel error when lagunits="seconds"

  • Corrected several docstrings to match actual behaviour (e.g. deriveAPT acceleration-coefficient matrix shape, plotTS y-axis temperature type, deriveC25 output units, removeloops return type, and alignchannel shiftfill options)

Release 1.1.2

2025-10-06

  • DeriveSA now recognizes latitude and longitude at 0 correctly

  • Fixed a bug where channels’ derived status were processed improperly

  • Fixed a bug where the region profile order was calculated incorrectly

  • Fixed a bug where the region profile order was read incorrectly from the RSK file

  • Fixed a bug where the alignchannels encountered an error when lagunit == ‘seconds’

  • Fixed a bug where RSK.trim removed incorrect profile indices

Release 1.1.1

2022-11-09

  • Support “EPdesktop” RSK files up to the latest version (from v1.13.4 to v2.18.2)

Release 1.1.0

2022-09-09

  • New method RSK.deriveAPT() to derive triaxial accelerations and temperature from the accelerometer period data

  • pyRSKtools now supports reading data from RBR cervello and RBR cervata

Release 1.0.0

2022-08-22

  • Initial release 🎉