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