Skip to content

TA Instruments TRIOS .tri

TRIOS 5 writes the data of TA Instruments DSC, TGA and DMA analyzers and Discovery rheometers as .tri files. OpenReadout returns every procedure step with its stored signals, the instrument and sample facts, and for parallel-plate oscillation steps the moduli TRIOS computes. Files of TRIOS 3 and 4 are refused.

Derived from public TRIOS 5.1 to 5.9 files of several Zenodo depositors (Discovery HR-2 and HR30, DSC25, DSC2500, TGA550, DMA850), compared with TRIOS’s own exports where the depositor published them. Provenance: docs/provenance/ta-trios.md. Crate: openreadout-thermal.

format id files reads confidence
ta-trios .tri files written by TRIOS 5 (DSC, TGA, DMA, Discovery rheometers) every procedure step with its stored signals; the instrument, serial, TRIOS version, operator, sample, procedure and geometry; for parallel-plate oscillation steps the storage and loss moduli, tan δ and complex viscosity TRIOS computes generated (book/src/reference/evidence.md)

Not read: files of the 2019 generation (TRIOS 3/4; byte 2 = 0C), whose steps hold no signal records of this layout — refused with exit 6 and a hint to export from TRIOS; variables TRIOS computes and does not store (normalised heat flow, derivatives, viscosities of flow steps, DMA moduli, the moduli of other geometries); per-point oscillation waveforms; analysis results (fits, peak integrations) stored in the file.

Layout

part content our reading
bytes 0-24 00 25, a generation byte (0E), a size, 08 25 02, …, 14 20 01, u32 header length, u32 entry count generation → format_version
header entry count × (key, value) of 7-bit-length UTF-8 strings: instrumenttype, instrumentserialnumber, instrumentname, companyname, rundate, culture, ticks (.NET ticks of the PC clock), holder (geometry), operator, project, samplename, comments, procedurename, proceduresegments (; or #), proceduresignals, instrumentmode, testtype, samplesize vendor tree trios; experiment facts
thumbnail 01 00 01, u32 length, a PNG skipped
objects 21 06 <u32 length> <GUID>; a procedure step’s payload starts with 16 zero bytes and F2 21 01 04 00 00 00 00 00 00 00 01 00 11 20 02 and contains its properties and signals one trace per step with signals
properties 20 04 <u32 length> <key GUID> …, 06 20 01 <u32 length> <u32 type> <u32 1> <value> (type 2 float64, 4 string) step name (key d467abca-…), TRIOS version (ed6fea85-…), the moduli constants below
signal 21 06 <u32 length> <signal GUID> 01000000 01000000 00 F2 21 01 04000000 00000000 01 00 <u32 n> 01 10 21 01 <u32 L> <L bytes> 01 00 <u32 n> n × float32, then 3 bytes a channel; the L-byte block is a zero (L = 4) or n per-point u32 flags (extra.flagged_points counts the non-zero ones)
other 21 06 records second u32 0x02800001: a variable TRIOS computes (no values); 0x101: the step’s signals again with n + 1 points and no values; first u32 2: 64 values per point (oscillation waveforms) left out (assurance.undecoded)

Each step’s signal GUID is global: the same quantity has the same GUID in every file and instrument. Values are SI (time s, heat flow W, weight kg, torque N·m, angles rad, gap m) except temperature (°C).

Channels (our vocabulary)

The first channel is the step’s time axis: time when stored (DSC, TGA), else step_time (rheometers), else the point index (extra.axis.quantity = point). Channels keep the stored order after it. extra.label is TRIOS’s name, extra.guid the signal GUID.

name TRIOS label unit how it was named
time Time s proceduresignals position (DSC, TGA); DSC/TGA exports
temperature Temperature °C every export
heat_flow Heat Flow W DSC proceduresignals; = −(exported Heat Flow (Normalized)) × sample size (the files’ display setting is Exo Up)
delta_t, delta_t_zero, t_zero_temperature, cell_purge, heater_temperature, power_delivered, reference_junction_temperature, flange_temperature, heat_flow_phase, total_heat_capacity Delta T, Delta Tzero, Tzero Temperature, Cell Purge, Heater Temp, Power Delivered, Reference Junction Temperature, Flange Temperature, Heat Flow Phase, Total Heat Capacity °C for the temperatures, else none DSC25 proceduresignals (13 names for 13 records), the same GUIDs in the same positions in the DSC2500 file
heat_capacity Heat Capacity none DSC2500 proceduresignals (14 names for 14 records)
weight Weight kg TGA proceduresignals; TGA export (mg)
temperature_difference, sample_purge, balance_purge, set_point_temperature, ramp_rate Temperature Difference, Sample Purge, Balance Purge, Set Point Temperature, Ramp Rate °C for the set point, else none TGA550 proceduresignals positions (9 names, 10 records; the tenth is unnamed)
angular_frequency Angular frequency rad/s rheometer exports (30 of 30)
step_time Step time s rheometer exports
raw_phase Raw phase rad rheometer exports (in °)
oscillation_torque Oscillation torque N·m rheometer exports (in µN·m)
oscillation_displacement Oscillation displacement rad rheometer exports
gap Gap m the moduli (TRIOS’s strain constant needs it)
signal_<first 8 hex of the GUID> — none unknown meaning
storage_modulus, loss_modulus, tan_delta, complex_viscosity Storage modulus, Loss modulus, Tan(delta), Complex viscosity Pa, Pa, –, Pa·s computed (below); extra.computed says so

Oscillation moduli (computed)

For steps with angular frequency ω, torque M, raw phase φ, displacement θ and gap h, when the holder names a parallel plate and the file stores the geometry’s stress constant K_τ (e4fea4e5-…, 2/(πR³)), the instrument inertia (6594d858-…), the geometry inertia (2dad9ebd-…) and the sample density ρ (a58eb6fe-…):

  • R = (2 / (π K_τ))^(1/3), strain constant K_γ = R / h;
  • I = instrument inertia + geometry inertia + π ρ h R⁴ / 6 (the sample);
  • G′ = K_τ (M cos φ + I ω² θ) / (K_γ θ), G″ = K_τ M sin φ / (K_γ θ), tan δ = G″ / G′, |η*| = √(G′² + G″²) / ω.

These are TRIOS’s numbers: in 30 of 30 exports of one depositor (three sessions with different inertia calibrations, a 12 mm plate) within 2e-5 relative in time sweeps and 4e-4 in frequency sweeps (at 628 rad/s the inertia term cancels 99 % of the torque, and the stored float32 values limit the difference). Other plate diameters are computed the same way but never compared: the assurance feature oscillation moduli, parallel plate <d> mm says which.

Validation

cargo test -p openreadout-corpus-tests --features corpus (tests/series_oracle/mod.rs, oracle/series_oracle.py --trios-export): every column TRIOS exported whose label a channel shares is compared row by row (sampled at up to 256 rows): rheometer exports to the export’s 6 significant digits (stored signals) and 1e-3 relative (moduli), DSC time, temperature and heat flow to the CSV’s rounding, TGA time, temperature and weight to the workbook’s rounding; the operator and sample name of the rheometer exports’ Details sheet.

Vocabulary (public API of openreadout-thermal, TRIOS)

identifier meaning
TriosReader reader of TA Instruments TRIOS .tri files
TRIOS_FORMAT_ID ta-trios

How this reader was derived, file by file: provenance log.