Malvern Zetasizer .dts
The Malvern Zetasizer software (Nano, Pro and Ultra) saves dynamic light scattering and zeta potential measurements as .dts files. OpenReadout returns one table row per size or zeta record: sample, time, temperature and the results the software computed (Z-average, PDI, peaks, zeta potential, mobility, conductivity). No prior art exists for this binary format. It was derived from public files of several depositors, one of whom also published the Zetasizer’s own table of zeta results. Provenance: docs/provenance/malvern-zetasizer.md. Crate: openreadout-biophys.
| format id | files | reads | confidence |
|---|---|---|---|
malvern-zetasizer-dts |
.dts measurement files of the Zetasizer software (Nano, Pro, Ultra; versions 7.02-8.01) |
size and zeta records: header, sample, results | evidence rubric (docs/assurance.md) |
Not read: ZS Xplorer .zmes files; the size distributions, correlation functions, zeta
distributions and phase plots stored in each record; molecular-weight and other record kinds
(listed only).
Layout
A compound file ([MS-CFB]):
Header:u161, a 16-byte identifier (c0 fe e4 a2 b2 26 d6 11 99 1b 00 90 27 9b 77 0c),u161,u32the next record number.Deleted: the deleted records.REC<n>: one stream per record,nits record number.
A record is a sequence of fields without tags. Strings are u32 byte length, 0x01, UTF-16LE
ending in NUL.
| offset | field |
|---|---|
| 0 | u16 record schema (10 in software 7.02; 13 in 7.12-8.01) |
| 2 | u16 kind: 1 size, 2 zeta |
| 12 | u32 record number |
| 16 | string: software version (7.13, 8.00.4813) |
| then | f64 measurement date: OLE Automation days, local time |
| then | string: instrument serial (MAL…) |
| then | u32, f32, f32 measured temperature (°C) |
Further on: the operator, the SOP path, the dispersant (one or more strings with their
properties), the material and a 46-byte block that begins 01 00 00 00 01 00 and ends
02 00 00 00 01 00 00 02 00 00 00 01 00 00, then the sample name. The reader takes the
string after the first material block of that shape.
Size results are located by their structure: f32 Z-average (d.nm), f32 PdI, u32 n and
n f32 (a fit of the correlation function), then for the intensity, number and volume
distributions in turn: u32 k + k peak means (d.nm), u32 k + k areas (%), u32 k + k widths
(d.nm); a distribution’s areas sum to 100.
Zeta results: u32 5 + 5 f32 zeta peak areas (%, largest first), u32 5 + 5 zeta peak
means (mV), f64 conductivity (mS/cm), then ten f32: applied voltage (V), zeta potential
(mV), zeta deviation (mV), mobility (µm·cm/V·s), mobility deviation, five not identified; then
u32 5 + 5 zeta peak widths and the mobility peak areas, means and widths (u32 5 + 5 each).
A result block is returned only when exactly one block of that structure is in the record; a record with none (an aborted measurement) or several is listed without results and with a finding.
What the reader returns
Table records, one row per record in record-number order:
| column | unit | |
|---|---|---|
record |
— | record number |
kind |
— | size, zeta or other |
sample_name, measured_at |
— | ISO local time |
temperature |
°C | measured |
z_average, pdi |
nm, — | size records |
peak1_mean … peak3_width |
nm, %, nm | intensity peaks (mean, area, width) |
zeta_potential, zeta_deviation |
mV | zeta records |
mobility, mobility_deviation |
µm·cm/(V·s) | |
conductivity |
mS/cm | |
voltage |
V | applied voltage (inferred) |
zeta_peak1_mean … zeta_peak3_width |
mV, %, mV | zeta peaks |
Table peaks: every stored peak (record, distribution intensity/number/volume/zeta/mobility,
peak, mean, area, width, unit).
Experiment: vendor Malvern Panalytical, model Zetasizer, serial and software version (first record), start and end (earliest and latest record), the sample name when every record has the same one, technique dynamic light scattering (all records size) or zeta-potential measurement (all zeta).
The export’s number mean, volume mean and diffusion coefficient are computed by the software from the distributions and the Z-average; they are not stored and not returned.
Validation
tests/series_oracle/mod.rs against the depositor’s Zetasizer results table (oracle/ zetasizer_oracle.py): 36 zeta records (software 7.12) — record, sample name, date (within the
export’s second), temperature, zeta potential, mobility and conductivity — agree within the
export’s rounding, 252 cells. The other files (7.02, 7.13, 8.00, 8.01) are read for structure:
every record’s header walks and every size record with results has exactly one block of the size
structure.
Size results are withheld. The size-result layout above was mapped on one depositor’s size
records whose export matched it (Z-average, PdI, peaks), but that record is the source of a
held-out file of another format and cannot be development evidence; no other public export of
size records was found. Until one is in the corpus, z_average, pdi and the intensity peaks
are NaN and a finding (size_results_withheld) says so; the records, samples, dates and
temperatures of size records are returned.
Vocabulary (public API of openreadout-biophys, Zetasizer)
| identifier | meaning |
|---|---|
ZetasizerReader |
reader of Zetasizer .dts files |
ZETASIZER_FORMAT_ID |
malvern-zetasizer-dts |
FORMAT_ID |
malvern-zetasizer-dts (module constant) |
Peaks |
one distribution’s peaks: mean, area, width |
Size |
size results: z_average, pdi, peaks |
Zeta |
zeta results: zeta, zeta_deviation, mobility, mobility_deviation, conductivity, voltage, zeta_peaks, mobility_peaks |
Record |
one record: stream, schema, kind, number, version, measured_at, serial, temperature, sample, size, zeta, matches |
How this reader was derived, file by file: provenance log.