One of vortex’s most powerful features is its scan pattern generation capability. For vortex, a scan pattern pairs a trajectory, a uniformly-spaced time-series of waypoints across the imaging scene and set of markers that annotate the trajectory with useful information. The core scan execution components in vortex enforce no further structure on scan patterns. There is no concept of a raster scan or a spiral scan; vortex works only with trajectories and markers.
This design strategy decouples the scanning and acquisition from artificial restrictions such as equal lengths for all segments or in order acquisition of a volume. vortex defers responsibility for formatting the data into a meaningful structure (e.g., a rectangular volume) until the processing stage. That said, vortex offers an extensive set of utility classes to generate and format common scan patterns, but you are free to design your own pattern by supplying the waypoints and markers.
Time-Optimal Trajectory Generation¶
vortex incorporates the time-optimal motion planner Reflexxes. High-level scan pattern generation classes use Reflexxes to calculate optimally fast corners and flyback, once provided velocity and acceleration limits for the scanner hardware. With properly calibrated dynamics limits, this allows vortex to execute the scan pattern as fast as possible without introducing distortion or artifact. vortex aims to bring the scan hardware to the desired position in the imaging scene on time, every time.
vortex uses motion planning to generate the inactive portion of the scan pattern automatically. There is no need to manually specify or calculate flyback or to intentionally round corners in the scan pattern. vortex will generate an on-the-fly inactive segment that matches the entry and exit velocities of each active segment. This capability significantly reduces distortion at pattern edges because the scanner hardware enters the active region at the necessary velocity.
The set of positions through which a scan must pass is called its waypoints.
The waypoints object is a list of lists of points, where each list of points describes the path of a single segment.
RasterScan, for example, would have a rectangular grid as its waypoints, such as plotted below.
In the plot below, each “x” is a waypoint at which data collection occurs.
The order and direction in which to execute segments is called the scan’s pattern. Patterns can request features such as bidirectional segments or repetition of segments. The line in the plots below illustrates the time-optimal scan trajectory that passes through the waypoints from above.
Markers encode the high-level structure of the scan pattern and additional useful information.
Without them, the trajectory is merely a sequence of waypoints.
Commonly, markers denote the status of a waypoint (active or inactive) and the boundaries between substructures within the scan pattern.
SegmentBoundary indicates a transition point between segments within the scan.
More complex uses include
Event, which allow the user to associate custom information with a waypoint.
vortex supports multiplexing multiple scan patterns or markers through the use of flags, implemented by
This is a bitmask which processing code tests to determine if it should act on a marker.
A typical usage scenario is to insert an aiming scan within a raster scan and then subject the data acquired during each scan to separate processing or display (see example).