Skip to content

PerkinElmer .sp

PerkinElmer Spectrum software (Spectrum One, Frontier, Spectrum 3, also with a Spotlight microscope) saves a single IR or UV/Vis spectrum as a .sp file. OpenReadout returns it as one trace with one sweep, with the instrument, detector, source, resolution and scan settings in the trace’s extra.

Derived from specio’s .sp reader (BSD-3-Clause, read as prior art and run as a reference reader) and hex dumps of five public files. Provenance: docs/provenance/perkinelmer-sp.md. Format id perkinelmer-sp, family spectroscopy, crate openreadout-spectro (PeSpReader, PESP_FORMAT_ID).

Detection: the file starts with PEPE, followed by a 40-byte description (2D constant interval DataSet file).

Layout

From byte 44: blocks of a u16 id, an int32 body length and the body. A body is either nested blocks or one typed member: a u16 type tag, then the value — 0x7523 text (u16 length), 0x751b float64, 0x751c float64 followed by a validity flag (0x7524, u16), 0x751d two float64, 0x752b and 0x751a uint32, 0x752c uint16 followed by a validity flag, 0x7515 uint16, 0x7516 a float64 array (u32 byte length). The data set is block 120; its members:

id member our use
35698 two float64 x of the first and last point
35699 two float64 y minimum and maximum
35700 float64 data interval (checked against the range)
35701 uint32 number of points
35703 text x units (cm-1 → wavenumber, nm → wavelength)
35704 text y units (A → absorbance in AU, %T → transmittance in %, %R → reflectance in %, KM → kubelka_munk; others intensity with the text as unit)
35707 text spectrum kind (Spectrum)
35713 text data set name
35709 text path the file was saved to
35708 float64 array the values
35711 nested history records (block 121: user 35698, operation 35699, date 35700, arguments 35701, description 35702, the previous record under 35703 — each processing step adds a level, so the chain may nest dozens of blocks deep; blocks are read to depth 256) and the instrument record (block 123: model 35837, serial 35838, firmware 35839; settings 35840–35882), under the oldest history record

The instrument settings are named from their values across the corpus (our reading; specio reads the same texts by position): 35840 scans, 35841 detector, 35842 source, 35843 beamsplitter, 35844 resolution (cm⁻¹, flagged float64), 35845 apodization (Strong, Filler), 35846 spectrum type, 35847 beam type, 35849 phase correction, 35854 accessory, 35882 laser wavenumber (15798 cm⁻¹, HeNe).

Data model

One trace, one sweep, one channel (float64): x evenly from the first to the last value over the points.

traces[].extra (our vocabulary)

key from
axis, data_type (INFRARED SPECTRUM, UV/VIS SPECTRUM for nm), y_quantity 35698, 35701, 35703, 35704
title, spectrum_kind 35713, 35707
instrument, instrument_serial, instrument_firmware 35837–35839
detector, source, beamsplitter, apodization, spectrum_type, beam_type, phase_correction, accessory settings (above)
scans, resolution_cm1, laser_wavenumber_cm1 35840, 35844, 35882
data_interval 35700
acquired_at, operator the history record whose operation is Created as New Dataset (else the oldest): its date (Thu Mar 09 09:19:21 2006, with (GMT+1:00) when recorded) and user
x_units_text, y_units_text 35703, 35704

Experiment. sample.id = the data set name, instrument (PerkinElmer, model, serial), method.parameters: resolution, scans, laser_wavenumber, detector, source, beamsplitter, apodization, accessory; acquisition.started_at, operator, comment (the history record’s description, e.g. the microscope position).

Vendor tree. info --view full holds the description, the saved path, every history record and the whole block tree with decoded members by id.

Validation

specio 0.1.0 (BSD-3) on the 5 corpus files: every value bit for bit and the x-axis ends (specio 0.1 needs collections.Iterable restored on Python ≥ 3.10, and its instrument-text step fails on Latin-1 bytes; the oracle makes only that metadata step lenient). No vendor export of these files is public.

Known gaps

One spectrum per file; PerkinElmer Spotlight images (.fsm, a PEPE file whose description names a 4-D data set) are read by the perkinelmer-fsm reader (docs/formats/perkinelmer-fsm.md) and not claimed here. UV-Vis .sp files (Lambda instruments, x in nm) follow the same layout by inference only: no public file was available. Settings other than those named above are in the vendor tree by member id.

Vocabulary (public API of openreadout-spectro)

identifier meaning
PeSpReader the reader (FormatReader): detection by the first bytes, open/open_input
PESP_FORMAT_ID the format id, perkinelmer-sp
SpectroDataset an opened file (the Dataset the four spectroscopy readers share): traces, tables, map images and attachments read lazily

Everything else — trace names, channel names, extra keys and their values — is listed in the tables above in our own words.


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