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_TYPE | Description |
---|---|
0x00001D01 | Time series |
0x00002D03 | Spatio-temporal data |
0x00002D04 | Time-frequency data |
0x00002D05 | Scalar map data |
0x00002D06 | Velocity map data |
0x00003D02 | Phase map data |
Map values are stored in row-major order.
Time series
Current version : 1
Offset | Field name | Type | Size | Units |
---|---|---|---|---|
0 | DATA_TYPE | Int32 | 4 | |
4 | VERSION | Int32 | 4 | |
8 | START_TIME | Float64 | 8 | seconds |
16 | SAMPLING_TIME | Float64 | 8 | seconds |
24 | INPUT_RANGE_MIN | Float64 | 8 | |
32 | INPUT_RANGE_MAX | Float64 | 8 | |
40 | LENGTH | Int32 | 4 | |
... | RESERVED | - | - | |
512 | SIGNAL VALUES | Float64 | LENGTH * 8 |
The units depends on the input. Data from analog inputs are stored in volts.
Scalar map data
Current version : 1
Offset | Field name | Type | Size | Units |
---|---|---|---|---|
0 | DATA_TYPE | Int32 | 4 | |
4 | VERSION | Int32 | 4 | |
8 | WIDTH | Int32 | 4 | |
12 | HEIGHT | Int32 | 4 | |
40 | SCALE_X | Float64 | 8 | mm/px |
48 | SCALE_Y | Float64 | 8 | mm/px |
56 | SAMPLE_COUNT | Int32 | 4 | |
60 | SCALAR_TYPE | Int32 | 4 | |
... | RESERVED | - | - | |
512 | BACKGROUND | UInt16 | WIDTH * HEIGHT * 2 | |
512 + WIDTH * HEIGHT * 2 | VALUES | Float32 | WIDTH * HEIGHT * 4 |
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
Offset | Field name | Type | Size | Units |
---|---|---|---|---|
0 | DATA_TYPE | Int32 | 4 | |
4 | VERSION | Int32 | 4 | |
8 | WIDTH | Int32 | 4 | |
12 | HEIGHT | Int32 | 4 | |
40 | SCALE_X | Float64 | 8 | mm/px |
48 | SCALE_Y | Float64 | 8 | mm/px |
56 | SAMPLE_COUNT | Int32 | 4 | |
... | RESERVED | - | - | |
512 | BACKGROUND | UInt16 | WIDTH * HEIGHT * 2 | |
512 + WIDTH * HEIGHT * 2 | VECTORS | Vector | WIDTH * HEIGHT * 8 | m/s |
struct Vector {
float x; // m/s
float y; // m/s
};
Phase map data
Current version : 1
Offset | Field name | Type | Size | Units |
---|---|---|---|---|
0 | DATA_TYPE | Int32 | 4 | |
4 | VERSION | Int32 | 4 | |
8 | WIDTH | Int32 | 4 | |
12 | HEIGHT | Int32 | 4 | |
16 | FRAME_COUNT | Int32 | 4 | |
40 | SCALE_X | Float64 | 8 | mm/px |
48 | SCALE_Y | Float64 | 8 | mm/px |
56 | START_TIME | Float64 | 8 | seconds |
64 | SAMPLING_TIME | Float64 | 8 | seconds |
... | RESERVED | - | - | |
512 | BACKGROUND | UInt16 | WIDTH * HEIGHT * 2 | |
512 + WIDTH * HEIGHT * 2 | PHASE | Float32 | WIDTH * HEIGHT * FRAME_COUNT * 4 | radians |
512 + WIDTH * HEIGHT * (2 + FRAME_COUNT * 4) | SINGULARITIES | PointArray | Length prefixed array |
// for each frame
struct Singularities {
int count;
Point* y;
};
struct Point {
double x;
double y;
};
Time-frequency data
Current version : 1
Offset | Field name | Type | Size | Units |
---|---|---|---|---|
0 | DATA_TYPE | Int32 | 4 | |
4 | VERSION | Int32 | 4 | |
8 | WIDTH | Int32 | 4 | |
12 | HEIGHT | Int32 | 4 | |
... | RESERVED | - | - | |
512 | MAGNITUDE | Float32 | WIDTH * HEIGHT * 4 | |
512 + WIDTH * HEIGHT * 4 | TIME_VALUES | Float64 | WIDTH * 8 | seconds |
512 + WIDTH * HEIGHT * 4 + WIDTH * 8 | FREQ_VALUES | Float64 | HEIGHT * 8 | Hz |
Spatio-temporal data
Current version : 1
Offset | Field name | Type | Size | Units |
---|---|---|---|---|
0 | DATA_TYPE | Int32 | 4 | |
4 | VERSION | Int32 | 4 | |
8 | WIDTH | Int32 | 4 | |
12 | HEIGHT | Int32 | 4 | |
16 | START_TIME | Float64 | 8 | seconds |
24 | SAMPLING_TIME | Float64 | 8 | seconds |
32 | SCALE_X | Float64 | 8 | mm/px |
40 | SCALE_Y | Float64 | 8 | mm/px |
48 | POINT_COUNT | Int32 | 4 | |
... | RESERVED | - | - | |
512 | AMPLITUDE | Float32 | WIDTH * HEIGHT * 4 | |
512 + WIDTH * HEIGHT * 4 | POINTS | Point | POINT_COUNT * 8 |
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;
};