Data Model#
vortex implements related data models for organizing scan patterns and acquired data in memory.
Scan Patterns#
The fundamental unit of the vortex scan model is the sample. Each sample corresponds to a point in the imaging scene at which data is acquired. Samples are organized hierarchically into segments, volumes, and scans.
A segment is a temporally-ordered sequence of samples. Most frequently a segment represents a line across the imaging scene, although there is no formal geometric constraint. A volume is a logically-ordered collection of segments. Each segment has a unique index within the volume, but segments may be acquired in any order. A scan is a logically-ordered collection of volumes. Like segments, each volume has a unique index within the scan. Volumes may be acquired in any order within a scan.
Name |
Ordering |
Subdivision |
OCT Analogue |
---|---|---|---|
sample |
A-scan |
||
segment |
temporal |
sample |
B-scan |
volume |
logical |
segment |
|
scan |
logical |
volume |
Memory Layout#
The fundamental unit of the vortex memory model is the sample. This is the smallest unit of data acquired by the an acquisition component. Each sample may consist of multiple channels. For multi-channel acquisitions, a sample will contain as many channels as the acquisition. Single-channel acquisition are considered to have one channel per sample. A record is a sequence of samples in order of acquisition, and a block is a sequence of records in order of acquisition.
Name |
Dimension |
Shape |
Subdivision |
OCT Analogue |
---|---|---|---|---|
channel |
0D |
|||
sample |
1D |
C |
channel |
|
record |
2D |
S x C |
sample |
A-scan |
block |
3D |
R x S x C |
record |
B-scan |
C = channels per sample, S = samples per record, R = records per block
The scan pattern and memory models interface only at the sample and record level, respectively. Specifically, the data acquired at a given scan pattern sample yields a record in memory. vortex components operate on blocks rather than segments or volumes which decouples the scan pattern from the underlying memory layout. This provides considerable flexibility in scan pattern generation.
Important
vortex uses C-style or row-major data ordering.
Memory Management#
vortex manages its own CPU and GPU memory allocations to avoid memory leaks. When providing access to buffers via accessors or callbacks, vortex maintains ownership of the underlying buffer. Applications that wish to maintain buffer control should make a copy.