TractX: fixel indexing and bundle membership

fixel index first, voxel coords second — multiple directions can live at the same xyz
need one attribute order, stop hardcoding the reshape. tiny fake grid with 2 crossing bundles might be easier to debug than an entire brain

representation: one voxel can contain multiple fiber populations/fixels. The notebook treats index.mif as two volumes: number of fixels at each voxel, then the first fixel index for that voxel. directions.mif supplies associated directions.

recorded indexing sketch:

num_per_voxel = index_data[:, :, :, 0]
first_indices = index_data[:, :, :, 1]
# For a voxel, its fixel indices run from first_index
# through first_index + number_of_fixels - 1.

Local fiber-orientation peaks.
Local fiber-orientation peaks.

For each bundle's fixel TDI map, add that bundle's name/index to every nonzero fixel and increment its bundle-membership count. Keep voxel coordinates and fiber direction in the fixel attributes; the voxel record separately lists its contained fixels.

code location: “Identifying Bottlenecks” and “Extra Notes → Quantifying bundles per fixel.” The draft uses a hard-coded reshape (240, 240, 150, 2); recover dimensions from the actual data before generalizing. The notes also vary attribute-list ordering, so define one schema before writing consumers.

open issue: overlapping bottlenecks motivated using fixel index before voxel index; multiple directions in one voxel must not be merged just because they share coordinates.