DAT File Format

DAT files store decoded event. The DAT file format is a binary little-endian format file. It is composed of three sections:

  1. ASCII text header

  2. Binary event type and size information

  3. Binary event data

DAT File Header

DAT file header contains ASCII information and metadata associated to the DAT file. It is a sequence of “keyword, value” pairs written line-by-line. More precisely, the file header is composed of text lines starting with “%” (0x25) followed by a space (0x20), a keyword, a space (0x20), a value and New Line NL / Line Feed (0x0A).

Here is an example of DAT file header:

% Data file containing CD events
% Date 2020-09-14 14:18:29
% Version 2
% Width 640
% Height 480

Below, a table with common keyword, value pairs:

Keyword

Value

Mandatory

Date

Recording Date, format: YYY-MM-DDHH:MM:SS

Data file containing

Type of event: CD (For now, only supported type)

YES

Version

Format version. Currently: 2

YES

Width

Horizontal size of image sensor array.

Height

Vertical size of image sensor array.

Binary Event Type and Size

This information is provided as two bytes: type and size.

The most important event types are:

  • Event2d: generic 2D event

  • EventCd: specialized Event2d for Contrast Detection (CD) event

  • EventExtTrigger: external trigger event (see External Triggers section)

The event size is 8 for all those types.

Byte

Description

Value

First byte

Event type

Event2d: 0x00 (0)

EventCd: 0x0C (12)

EventExtTrigger: 0x0E (14)

Second byte

Decoded event size (in bytes)

8 (0x08)

Binary Event Data

A DAT file with CD events is made of a sequences of 64-bit (8 bytes) words stored in the following format:

../../_images/cd_event_dat_file.png

The bitfield structure and the padding of the different event types can be found in the SDK headers:

  • on Windows in <install-prefix>\share\metavision\include\metavision\sdk\base\events

  • on Linux in /usr/include/metavision/sdk/base/events

There is an header file for each event type (event_cd., event_ext_trigger.h etc.) that contains the structure of the raw event as it will be recorded in a DAT file. For example for external triggers:

struct RawEvent {
         uint32_t ts;
         unsigned int p : 4;
         unsigned int pad1 : 22;
         unsigned int id : 6;
     });

Usually, data in DAT format takes more space on disk compared to RAW format, therefore, it’s preferable to use RAW format for events recording. RAW format also reduces the data rate on the USB communication, lowering the stress on the interface and the risk of introducing delays.

DAT file format can be used for offline data processing, for example for data processing in MATLAB (contact us for a basic script uploading data to MATLAB).

In case you need to convert a RAW file to a DAT file, you could use RAW to DAT application.