Skip to main content

Export data formats

List of file formats used by BV Workbench.

CSV

Comma separated 64-bit floating point values.

  • Signals : time column and value column for each signal.
  • Images : pixel values exported in the same arrangement of row,columns as the data.

Apache Parquet

Binary format that can be read by MATLAB, Python, etc.

It is generally more efficient than CSV. See more details here.

DAT

Custom binary format used by BV workbench. The first 4 bytes indicates the data type.

DATA_TYPEDescription
0x00001D01Time series
0x00002D03Spatio-temporal data
0x00002D04Time-frequency data
0x00002D05Scalar map data
0x00002D06Velocity map data
0x00003D02Phase map data
NOTE

Map values are stored in row-major order.

Time series

Current version : 1

OffsetField nameTypeSizeUnits
0DATA_TYPEInt324
4VERSIONInt324
8START_TIMEFloat648seconds
16SAMPLING_TIMEFloat648seconds
24INPUT_RANGE_MINFloat648
32INPUT_RANGE_MAXFloat648
40LENGTHInt324
...RESERVED--
512SIGNAL VALUESFloat64LENGTH * 8
NOTE

The units depends on the input. Data from analog inputs are stored in volts.

Scalar map data

Current version : 1

OffsetField nameTypeSizeUnits
0DATA_TYPEInt324
4VERSIONInt324
8WIDTHInt324
12HEIGHTInt324
40SCALE_XFloat648mm/px
48SCALE_YFloat648mm/px
56SAMPLE_COUNTInt324
60SCALAR_TYPEInt324
...RESERVED--
512BACKGROUNDUInt16WIDTH * HEIGHT * 2
512 + WIDTH * HEIGHT * 2VALUESFloat32WIDTH * HEIGHT * 4
NOTE

The units depends on the scalar type field.

enum SCALAR_TYPE {
ActivationTime = 1, // s
RiseTime = 2, // ms
PeakTime = 3, // s
PeakAmplitude = 4,
PeakToDecayTime = 5, // ms
DecayTime = 6, // ms
DecayTau = 7, // ms
APD = 8, // ms
UpstrokeVelocity = 9, // units/ms (a.u.)
PeakToPeakInterval = 10, // ms
DiastolicInterval = 11, // ms
Frequency = 12, // Hz
Velocity = 13, // m/s
Alternans = 14, // % change relative to previous
ApdAlternans = 15, // ms
};

Velocity map data

Current version : 1

OffsetField nameTypeSizeUnits
0DATA_TYPEInt324
4VERSIONInt324
8WIDTHInt324
12HEIGHTInt324
40SCALE_XFloat648mm/px
48SCALE_YFloat648mm/px
56SAMPLE_COUNTInt324
...RESERVED--
512BACKGROUNDUInt16WIDTH * HEIGHT * 2
512 + WIDTH * HEIGHT * 2VECTORSVectorWIDTH * HEIGHT * 8m/s
struct Vector {
float x; // m/s
float y; // m/s
};

Phase map data

Current version : 1

OffsetField nameTypeSizeUnits
0DATA_TYPEInt324
4VERSIONInt324
8WIDTHInt324
12HEIGHTInt324
16FRAME_COUNTInt324
40SCALE_XFloat648mm/px
48SCALE_YFloat648mm/px
56START_TIMEFloat648seconds
64SAMPLING_TIMEFloat648seconds
...RESERVED--
512BACKGROUNDUInt16WIDTH * HEIGHT * 2
512 + WIDTH * HEIGHT * 2PHASEFloat32WIDTH * HEIGHT * FRAME_COUNT * 4radians
512 + WIDTH * HEIGHT * (2 + FRAME_COUNT * 4)SINGULARITIESPointArrayLength prefixed array
// for each frame
struct Singularities {
int count;
Point* y;
};
struct Point {
double x;
double y;
};

Time-frequency data

Current version : 1

OffsetField nameTypeSizeUnits
0DATA_TYPEInt324
4VERSIONInt324
8WIDTHInt324
12HEIGHTInt324
...RESERVED--
512MAGNITUDEFloat32WIDTH * HEIGHT * 4
512 + WIDTH * HEIGHT * 4TIME_VALUESFloat64WIDTH * 8seconds
512 + WIDTH * HEIGHT * 4 + WIDTH * 8FREQ_VALUESFloat64HEIGHT * 8Hz

Spatio-temporal data

Current version : 1

OffsetField nameTypeSizeUnits
0DATA_TYPEInt324
4VERSIONInt324
8WIDTHInt324
12HEIGHTInt324
16START_TIMEFloat648seconds
24SAMPLING_TIMEFloat648seconds
32SCALE_XFloat648mm/px
40SCALE_YFloat648mm/px
48POINT_COUNTInt324
...RESERVED--
512AMPLITUDEFloat32WIDTH * HEIGHT * 4
512 + WIDTH * HEIGHT * 4POINTSPointPOINT_COUNT * 8
NOTE

In this context, WIDTH is the number of time points. HEIGHT is the total number of divisions along the (poly)line. POINTS are coordinates in the source image sequence. Use SCALE_X and SCALE_Y to get distances between points.

struct Point {
int x;
int y;
};