client.get() returns the standard RHEED feature set. When you need the full per-region feature space, a filtered subset of properties, a time window, or the segmentation masks behind the features, use get_rheed_timeseries() and get_frame_masks().
Fetch the feature timeseries
get_rheed_timeseries() returns a DataFrame indexed by ["Angle", "Frame Number"] when both axes are available. For stationary videos there is a single angle; rotating videos carry one block per sampled azimuth.
Specular Intensity, Strain, Cumulative Strain, Oscillation Period, Diffraction Spot Count, and Lattice Spacing.
Include low-level features
Setinclude_low_level_features=True to add the full set of per-point, per-region features (spot areas, eccentricities, FWHM values, and similar) as extra columns.
Low-level features are per-point: a frame that was not featurized contributes NA to those columns.
Restrict to specific properties
Passproperty_names to fetch only the features you need. These are the underlying property names, which differ from the display column names in the returned DataFrame.
Limit the time window
Two parameters narrow which points come back, which matters for long growths and for live streams where you only want the tail:Attach segmentation masks
Every featurized frame of a processed RHEED video carries a binary segmentation mask of the diffraction pattern. Passinclude_masks=True to join those masks onto the timeseries on the Frame Number axis:
Mask coverage is sparse. Masks exist only for featurized frames, so rows whose frame has no mask contain NA in these columns, as do all rows when the video has no mask artifact at all. Drop the NA rows before decoding.
The mask fetch is scoped to the frame range the returned series actually spans, so combining
include_masks=True with last_n or elapsed_seconds pulls only the masks for that window rather than the whole video.
Fetch masks on their own
When you want masks without the feature columns, callget_frame_masks() directly. Frame numbers are absolute and keyed identically to the processed video frames and to the Frame Number axis of the timeseries, so a decoded mask overlays the matching frame of the video you get from download().
from_frame and to_frame, both inclusive:
For stationary videos every frame is featurized, so frame numbers are contiguous. For rotating and per-azimuth videos only a sampled subset is featurized, and frames without a mask are simply absent from the result.
decode=True) means the video has no per-frame mask artifact, either because the item is not RHEED or because it was processed before per-frame masks were persisted.
Overlay a mask on a frame
Combineget_frame() with a decoded mask to inspect a specific frame:
get_frame() accepts negative indices, so frame_index=-1 returns the last extracted frame. It returns None when the video has no extracted frames, the index is out of range, or the selected frame has no image.
For a single RHEED image item (rather than a video), the mask is already on the result object as result.mask, and get_plot(show_mask=True) renders it as an overlay. See Inspect Results.
Decode masks yourself
decode_mask_rle() handles the COCO RLE format used by every Atomscale mask endpoint. Use it when working with raw rows or with API responses fetched outside the SDK:
pycocotools.
Next steps
Similarity and Embeddings
Compare growths with embedding vectors.
Client Reference
Full parameter reference for every method.