cuslines 2.2.1__tar.gz → 2.2.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {cuslines-2.2.1 → cuslines-2.2.3}/PKG-INFO +1 -1
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/generic_tracker.py +58 -5
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines.egg-info/PKG-INFO +1 -1
- {cuslines-2.2.1 → cuslines-2.2.3}/run_gpu_streamlines.py +1 -1
- {cuslines-2.2.1 → cuslines-2.2.3}/.github/workflows/dockerbuild.yml +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/.github/workflows/publish_pypi.yml +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/.gitignore +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/.pre-commit-config.yaml +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/CLAUDE.md +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/Dockerfile +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/LICENSE +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/README.md +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/__init__.py +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/boot_utils.py +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/cuda_c/boot.cu +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/cuda_c/cudamacro.h +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/cuda_c/cuwsort.cuh +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/cuda_c/disc.h +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/cuda_c/generate_streamlines_cuda.cu +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/cuda_c/globals.h +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/cuda_c/ptt.cu +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/cuda_c/ptt.cuh +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/cuda_c/ptt_init.cu +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/cuda_c/tracking_helpers.cu +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/cuda_c/utils.cu +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/cuda_python/__init__.py +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/cuda_python/_globals.py +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/cuda_python/cu_direction_getters.py +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/cuda_python/cu_propagate_seeds.py +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/cuda_python/cu_tractography.py +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/cuda_python/cutils.py +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/metal/README.md +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/metal/__init__.py +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/metal/mt_direction_getters.py +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/metal/mt_propagate_seeds.py +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/metal/mt_tractography.py +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/metal/mutils.py +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/metal_shaders/boot.metal +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/metal_shaders/disc.h +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/metal_shaders/generate_streamlines_metal.metal +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/metal_shaders/globals.h +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/metal_shaders/philox_rng.h +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/metal_shaders/ptt.metal +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/metal_shaders/tracking_helpers.metal +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/metal_shaders/types.h +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/metal_shaders/utils.metal +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/metal_shaders/warp_sort.metal +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/numba/__init__.py +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/numba/nu_globals.py +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/numba/nu_tractography.py +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/numba_njit/generate_streamlines_numba.py +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/numba_njit/num_streamlines_numba.py +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/numba_njit/tracking_helpers.py +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/webgpu/README.md +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/webgpu/__init__.py +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/webgpu/benchmark.py +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/webgpu/wg_direction_getters.py +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/webgpu/wg_propagate_seeds.py +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/webgpu/wg_tractography.py +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/webgpu/wgutils.py +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/wgsl_shaders/boot.wgsl +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/wgsl_shaders/disc.wgsl +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/wgsl_shaders/generate_streamlines.wgsl +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/wgsl_shaders/globals.wgsl +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/wgsl_shaders/philox_rng.wgsl +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/wgsl_shaders/ptt.wgsl +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/wgsl_shaders/tracking_helpers.wgsl +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/wgsl_shaders/types.wgsl +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/wgsl_shaders/utils.wgsl +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines/wgsl_shaders/warp_sort.wgsl +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines.egg-info/SOURCES.txt +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines.egg-info/dependency_links.txt +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines.egg-info/requires.txt +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/cuslines.egg-info/top_level.txt +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/pyproject.toml +0 -0
- {cuslines-2.2.1 → cuslines-2.2.3}/setup.cfg +0 -0
|
@@ -3,6 +3,7 @@ import numpy as np
|
|
|
3
3
|
from tqdm import tqdm
|
|
4
4
|
from trx.trx_file_memmap import TrxFile
|
|
5
5
|
from dipy.io.stateful_tractogram import Space, StatefulTractogram
|
|
6
|
+
from dipy.tracking.streamlinespeed import compress_streamlines
|
|
6
7
|
from nibabel.streamlines.array_sequence import ArraySequence
|
|
7
8
|
from nibabel.streamlines.tractogram import Tractogram
|
|
8
9
|
|
|
@@ -16,11 +17,55 @@ class GenericTracker:
|
|
|
16
17
|
def __exit__(self, exc_type, exc, tb):
|
|
17
18
|
return False
|
|
18
19
|
|
|
20
|
+
def set_compression_parameters(self, pos_dtype=np.float32, linearize=False, tol_error=0.1, max_segment_length=10):
|
|
21
|
+
"""
|
|
22
|
+
Set compression parameters to compress generated streamlines.
|
|
23
|
+
Only works with TRX.
|
|
24
|
+
|
|
25
|
+
Parameters
|
|
26
|
+
----------
|
|
27
|
+
pos_dtype : dtype, optional
|
|
28
|
+
Data type to use for the positions of the streamlines.
|
|
29
|
+
Default: np.float32
|
|
30
|
+
|
|
31
|
+
linearize : bool, optional
|
|
32
|
+
Whether to linearize the streamlines using [1].
|
|
33
|
+
Default: False
|
|
34
|
+
|
|
35
|
+
tol_error : float, optional
|
|
36
|
+
If linearize is true, tolerance error in mm.
|
|
37
|
+
Default: 0.1
|
|
38
|
+
|
|
39
|
+
max_segment_length : float, optional
|
|
40
|
+
If linearize is true, maximum length in mm of any given segment produced by the compression.
|
|
41
|
+
Default: 10
|
|
42
|
+
|
|
43
|
+
References
|
|
44
|
+
----------
|
|
45
|
+
[1] Caroline Presseau, Pierre-Marc Jodoin, Jean-Christophe Houde, and Maxime Descoteaux.
|
|
46
|
+
A new compression format for fiber tracking datasets.
|
|
47
|
+
NeuroImage, 109:73-83, 2015. URL: 10.1016/j.neuroimage.2014.12.058
|
|
48
|
+
"""
|
|
49
|
+
self.pos_dtype = pos_dtype
|
|
50
|
+
self.linearize = linearize
|
|
51
|
+
self.tol_error = tol_error
|
|
52
|
+
self.max_segment_length = max_segment_length
|
|
53
|
+
|
|
54
|
+
|
|
19
55
|
def _ngpus(self):
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
56
|
+
return getattr(self, "ngpus", 1)
|
|
57
|
+
|
|
58
|
+
def _pos_dtype(self):
|
|
59
|
+
return getattr(self, "pos_dtype", np.float32)
|
|
60
|
+
|
|
61
|
+
def _linearize(self):
|
|
62
|
+
return getattr(self, "linearize", False)
|
|
63
|
+
|
|
64
|
+
def _tol_error(self):
|
|
65
|
+
return getattr(self, "tol_error", 0.1)
|
|
66
|
+
|
|
67
|
+
def _max_segment_length(self):
|
|
68
|
+
return getattr(self, "max_segment_length", 10)
|
|
24
69
|
|
|
25
70
|
def _divide_chunks(self, seeds):
|
|
26
71
|
global_chunk_sz = self.chunk_size * self._ngpus()
|
|
@@ -58,7 +103,7 @@ class GenericTracker:
|
|
|
58
103
|
# trx files use memory mapping
|
|
59
104
|
trx_reference = TrxFile(reference=ref_img)
|
|
60
105
|
trx_reference.streamlines._data = trx_reference.streamlines._data.astype(
|
|
61
|
-
|
|
106
|
+
self._pos_dtype()
|
|
62
107
|
)
|
|
63
108
|
trx_reference.streamlines._offsets = trx_reference.streamlines._offsets.astype(
|
|
64
109
|
np.uint64
|
|
@@ -87,6 +132,14 @@ class GenericTracker:
|
|
|
87
132
|
tractogram.to_world()
|
|
88
133
|
sls = tractogram.streamlines
|
|
89
134
|
|
|
135
|
+
if self._linearize():
|
|
136
|
+
sls = ArraySequence(compress_streamlines(
|
|
137
|
+
sls,
|
|
138
|
+
tol_error=self._tol_error(),
|
|
139
|
+
max_segment_length=self._max_segment_length(),
|
|
140
|
+
))
|
|
141
|
+
sls._data = sls._data.astype(self._pos_dtype())
|
|
142
|
+
|
|
90
143
|
new_offsets_idx = offsets_idx + len(sls._offsets)
|
|
91
144
|
new_sls_data_idx = sls_data_idx + len(sls._data)
|
|
92
145
|
|
|
@@ -127,7 +127,7 @@ parser.add_argument(
|
|
|
127
127
|
parser.add_argument(
|
|
128
128
|
"--ngpus", type=int, default=1, help="number of GPUs to use if using gpu"
|
|
129
129
|
)
|
|
130
|
-
parser.add_argument("--write-method", type=str, default="
|
|
130
|
+
parser.add_argument("--write-method", type=str, default="trx", help="Can be trx or trk")
|
|
131
131
|
parser.add_argument(
|
|
132
132
|
"--max-angle", type=float, default=60, help="max angle (in degrees)"
|
|
133
133
|
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|