Skip to main content

analysis.tdf - SQLite schema

The .tdf file is an ordinary SQLite3 database (header SQLite format 3\0). The subset of tables needed to walk the binary stream is documented here; the full schema has many more (for calibration curves, MALDI frame layouts, DIA windows, PASEF precursors, ...). Mode-specific tables are described in 05-instrument-tables.md.

GlobalMetadata (key/value)​

KeyTypeMeaning
SchemaVersionMajorstr of inte.g. "3"
SchemaVersionMinorstr of inte.g. "1", "3", "5", "6", "7"
InstrumentNamestre.g. "timsTOF Pro", "timsTOF SCP", "timsTOF Ultra"
InstrumentFamilystre.g. "timsTOF"
AcquisitionSoftwarestre.g. "timsControl"
AcquisitionSoftwareVersionstre.g. "2.0.18"
TimsCompressionTypestr of int1 = raw, 2 = zstd. See 03-frame-payload-encoding.md.
MzAcqRangeLower / Upperstr of floatprecursor m/z acquisition range
OneOverK0AcqRangeLower / Upperstr of float1/K0 acquisition range
DigitizerNumSamplesstr of intfull TOF range of the digitizer
......many more - instrument / method / calibration etc.

Frames - authoritative frame index​

Every row in Frames points at exactly one block in analysis.tdf_bin.

Observed columns (superset across sv 3.1 ... 3.7):

Id, Time, Polarity, ScanMode, MsMsType, TimsId,
MaxIntensity, SummedIntensities, NumScans, NumPeaks,
MzCalibration, T1, T2, TimsCalibration, PropertyGroup,
AccumulationTime, RampTime

Columns that matter for the binary stream:

ColumnTypeMeaning
IdINTFrame index, 1-based, dense.
TimsIdINTByte offset of this frame's block header in analysis.tdf_bin. Verified across all 12 non-empty bundles in the corpus.
NumScansINTNumber of TIMS scans (ion-mobility bins) in the frame.
NumPeaksINTSum of peaks across all scans of this frame.
PolarityTEXT"+" or "-".
ScanModeINT0 = MS1, 8 = PASEF, 9 = diaPASEF, 10 = PRM.
MsMsTypeINT0 = MS1, 2 = MRM/PRM (legacy), 8 = PASEF MS2, 9 = diaPASEF, 10 = prm-PASEF.
TimeREALRetention time (seconds from start of acquisition).
AccumulationTimeREALIon accumulation time in milliseconds (sv >= 3.5; absent in older schemas).
RampTimeREALTIMS ramp (elution) time in milliseconds. Equal to AccumulationTime in all observed bundles.
SummedIntensitiesINTSum of all peak intensities in the frame, normalised to 100 ms accumulation: SummedIntensities = sum(raw_intensity) * 100.0 / AccumulationTime_ms. For bundles where AccumulationTime ~ 100 the factor is ~ 1.0. Verified on PXD022216 (AT=108.46 ms): ratio decoded_sum / SummedIntensities = 1.08460 +/- 0.00001 across all 57,886 frames. Consumed as the per-frame point of the whole-run TIC chromatogram in mzML export.
MaxIntensityINTMost intense single peak in the frame. Consumed as the per-frame point of the whole-run basepeak chromatogram (BPC) in mzML export.
MzCalibrationINTForeign key into MzCalibration table.
TimsCalibrationINTForeign key into TimsCalibration table.

Mode-specific index tables​

TableWhen presentMeaning
DiaFrameMsMsInfo + DiaFrameMsMsWindowsDIA / diaPASEF acquisitionsPer-frame window ID + isolation window table
PasefFrameMsMsInfoPASEF (DDA) acquisitionsPer-frame precursor scan range + IM range + CE
PrmFrameMsMsInfo + PrmTargetsAll acquisitions (sv >= 3.1); populated only when PRM is activePer-frame PRM target + isolation; target list
PrecursorsPASEF DDAMonoisotopic m/z, charge, intensity, parent frame / scan
FrameMsMsInfoAll acquisitions (legacy pre-PASEF; always empty in modern corpus)Frame, Parent, TriggerMass, IsolationWidth, PrecursorCharge, CollisionEnergy
MaldiFrameInfoMALDI timsTOFXY spot coordinates (out of scope)
FrameProperties + PropertyDefinitionsAll acquisitions (sv >= 3.1)Per-frame instrument telemetry (source, vacuum, voltages)
GroupProperties + PropertyGroupsAll acquisitionsPer-group set-point values (acquisition config; analogous to FrameProperties but at group level)
SegmentsAll acquisitionsAcquisition segment registry (frame range + calibration-segment flag)
ErrorLogAll acquisitionsPer-frame / scan acquisition error or warning messages
CollisionEnergySweepingInfosv >= 3.7Per-frame CE sweep step table
CalibrationInfoAll acquisitionsCalibration audit trail (datetime, user, reference masses, measured TOFs)

Detail for each of these is in 05-instrument-tables.md.

Multi-calibration. MzCalibration may have more than one row. Instruments that support polarity switching store one calibration per polarity (observed in a sv=3.3 bundle: Id=1 for "+", Id=2 for "-"). The Frames.MzCalibration FK always selects the correct row; implementations must follow the FK rather than assuming Id=1.

Multi-segment acquisitions. Every bundle in the corpus (all schema versions) has exactly one row in Segments(Id, FirstFrame, LastFrame, IsCalibrationSegment) with IsCalibrationSegment = 0. All Frames rows reference TimsCalibration Id=1. Multi-segment runs (recalibration mid-acquisition) are supported by the schema but not yet observed in the corpus. See 05-instrument-tables.md.

Calibration tables​

MzCalibration​

One row per calibration ID. All corpus bundles have at least one row.

Id INTEGER primary key
ModelType INTEGER 1 in current bundles; 2 on older impacTEM bundles
DigitizerTimebase REAL ns per TOF index (observed: 0.2, 0.125 on timsTOF HT)
DigitizerDelay REAL flight time of TOF index 0 in ns (observed: ~18000-44000)
T1 REAL device temperature 1 at calibration (deg C)
T2 REAL device temperature 2 at calibration (deg C)
dC1 REAL temperature coefficient for T1 (observed 0-77; not applied)
dC2 REAL temperature coefficient for T2 (observed -3.7-0; not applied)
C0 REAL flight-time offset in ns
C1 REAL mz = C1 * ((t - C0) * 1e-6)^2 when C2 = C4 = 0
C2 REAL flight-time term linear in m/z, ns per Da
C3 REAL unidentified; 0.0 in every observed ModelType 1 row
C4 REAL m/z offset inside the square root, Da

Sample row (PXD027359, sv=3.5):

(1, 1, 0.2, 25581.8, 25.304233, 22.467882, 21.0, 0.0,
308.058693, 156618.35376, -0.003637, 0.0, 0.045331)

See 04-calibration.md for the TOF -> m/z formula built from these columns.

TimsCalibration​

One row per calibration ID. ModelType = 2.

Id INTEGER primary key
ModelType INTEGER always 2 (TIMS polynomial model)
C0 REAL 1 (polarity flag / scan_offset_A)
C1 REAL approx. MAX(NumScans)-1 (scan reference)
C2 .. C9 REAL polynomial coefficients

Sample row (PXD027359, sv=3.5):

(1, 2, 1.0, 926.0, 220.548, 75.423, 33.333, 1.0,
0.02452, 132.436, 13.074, 2768.110)

The proprietary evaluation formula for 1/K0 = f(scan, ...) is not published. See 04-calibration.md for the open-source fallback.