Spectr’s Main Binary Data

Internally, spectr stores all data in a proprietary binary format, which is documented here. The format is designed to be space efficient, while storing enough information to re-generate the index file if necessary.

Purpose

Note that the spectr binary data formats are not meant to be used as a generalized format for representing mass spectrometry data. It is designed specifically to serve as a backend storage format for use by spectr, and all access to the data should be done via the web services provided by spectr. The documentation of these formats are purely informational.

File Name / AWS S3 Object Name

Spectr may be installed on a server with locally attached storage or use Amazon AWS S3 for storage. In either case, the filename or object name for a data file is the SHA-384 has of the uploaded file plus “.data”. E.g., 98c11ffdfdd540676b1a137cb1a22b2a70350c9a44171d6b1180c6be5cbb2ee3f79d532c8a1dd9ef2e8e08e752a3babb.data. Since this is the same hash string used to query the data, spectr can rapidly find the required file in the configured storage directory or S3 bucket.

Endianness

All shorts, integers, and longs are written high byte first (big-endian). All floats and doubles are represented as ints or longs according to IEEE 754 floating-point “double format” bit layout, and written as ints and longs. See writeByte, writeShort, writeInt, writeLong, writeFloat, writeDouble at https://docs.oracle.com/javase/8/docs/api/java/io/DataOutputStream.html for more information.

File Header

This section appears once at the beginning of the file and contains information describing this file. Most of this information is related to ensuring data integrity by providing multiple avenues to verify stored data has expected lengths or hashes.

Header sections:

Name Data Type Bytes Description
Version short 2 The file format version for this file. Currently, there is only one version (3).
Full write indicator byte 1 Whether or not this file is fully written. 0 = no, 1 = yes, 2 = undefined (always 2 in S3)
Length of this file long 8 Length of this binary file (not present when using S3)
Header length short 2 Length of the header (in bytes), up to an excluding this value.
Scan file length long 8 Length of scan file used to generate this file.
SHA 384 hash length short 2 Length of SHA 384 hash, in bytes.
SHA 384 hash bytes byte[]   A byte array with a length equal to above.
SHA 512 hash length short 2 Length of SHA 512 hash, in bytes.
SHA 512 hash bytes byte[]   A byte array with a length equal to above.
SHA-1 hash length short 2 Length of SHA-1 hash, in bytes.
SHA-1 has bytes byte[]   A byte array with a length equal to above.

Scan Data

Each scan appears sequentially following the header above. Each scan contains the following data:

Scan Header:

Each scan contains the following information preceding the peak list.

Name Data Type Bytes Description
Scan level byte 1 The scan level. Commonly 1 (ms1) or 2 (ms2).
Scan number integer 4 Scan number for this scan from original file.
Retention time float 4 Retention time in seconds
Centroid? byte 1 0 if not centroided, 1 if centroided
Parent scan number integer 4 Scan number of parent scan (only present for ms2 and up)
Precursor charge byte 1 Reported charge of precursor ion (only present for ms2 and up)
Precursor m/z double 8 Reported m/z of precursor ion (only present for ms2 and up)
Peak count integer 4 Number of peaks in scan
Scan data length integer 4 Length in bytes of compressed scan data
Compressed scan data byte[]   A byte array compressed via GZIP. (See below)

Peak Byte Array

When uncompressed, the compressed scan data is an array of bytes, where each chunk of 12 bytes contains the following:

Name Data Type Bytes Description
m/z double 8 M/Z of peak
Intensity float 4 Intensity of peak