Operations#
Subset#
Extract a subset of streamlines by index:
use trx_rs::ops::subset::subset_streamlines;
let sub = subset_streamlines(&trx, &[0, 5, 10, 42])?;
Merge (concatenate)#
Merge multiple TRX files that share the same affine and dimensions:
use trx_rs::ops::merge::merge_trx_shards;
let merged = merge_trx_shards(&[&shard1, &shard2])?;
For more control over how groups are handled during concatenation, use concatenate_any_trx with ConcatenateOptions.
Set operations on streamlines#
use trx_rs::ops::streamline_ops::{difference, intersection, streamline_union};
let common = intersection(&trx_a, &trx_b)?;
let only_a = difference(&trx_a, &trx_b)?;
let all = streamline_union(&trx_a, &trx_b)?;
Duplicate removal#
use trx_rs::ops::streamline_ops::{remove_duplicates, DuplicateRemovalMode, DuplicateRemovalParams};
let params = DuplicateRemovalParams {
mode: DuplicateRemovalMode::Near,
tolerance_mm: 0.5,
endpoint_tolerance_mm: 1.0,
min_shared_voxel_fraction: 1.0,
};
let deduped = remove_duplicates(&trx, ¶ms)?;
Spatial queries#
Find streamlines whose axis-aligned bounding box intersects a query region:
use trx_rs::ops::subset::{build_streamline_aabbs, query_aabb, query_aabb_cached};
// One-shot query (builds AABBs each time):
let hits = query_aabb(&trx, [-10.0, -10.0, -10.0], [10.0, 10.0, 10.0])?;
// Cached AABB query for repeated use:
let aabbs = build_streamline_aabbs(&trx);
let hits = query_aabb_cached(&aabbs, [-10.0, -10.0, -10.0], [10.0, 10.0, 10.0]);
Connectivity matrices#
Compute group-to-group connectivity:
use trx_rs::ops::connectivity::{compute_group_connectivity, ConnectivityMeasure};
let matrix = compute_group_connectivity(&trx, ConnectivityMeasure::Count)?;
Metadata operations#
Copy DPS/DPV/group/DPG arrays between files:
use trx_rs::ops::copy_metadata::{copy_metadata, CopyMetadataOptions};
copy_metadata(&source, &dest, &CopyMetadataOptions {
dps_names: Some(vec!["weights".into()]),
dpv_names: None, // copy all
..Default::default()
})?;