AOT-biomaps 2.9.279__py3-none-any.whl → 2.9.300__py3-none-any.whl
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.
Potentially problematic release.
This version of AOT-biomaps might be problematic. Click here for more details.
- AOT_biomaps/AOT_Recon/AOT_Optimizers/LS.py +16 -19
- AOT_biomaps/AOT_Recon/AOT_Optimizers/MLEM.py +193 -109
- AOT_biomaps/AOT_Recon/AOT_Optimizers/PDHG.py +442 -11
- AOT_biomaps/AOT_Recon/AOT_SparseSMatrix/SparseSMatrix_CSR.py +8 -15
- AOT_biomaps/AOT_Recon/AOT_SparseSMatrix/SparseSMatrix_SELL.py +26 -23
- AOT_biomaps/AOT_Recon/AOT_biomaps_kernels.cubin +0 -0
- AOT_biomaps/AOT_Recon/AlgebraicRecon.py +2 -8
- AOT_biomaps/AOT_Recon/PrimalDualRecon.py +94 -41
- AOT_biomaps/AOT_Recon/ReconTools.py +78 -1
- AOT_biomaps/__init__.py +22 -1
- {aot_biomaps-2.9.279.dist-info → aot_biomaps-2.9.300.dist-info}/METADATA +1 -1
- {aot_biomaps-2.9.279.dist-info → aot_biomaps-2.9.300.dist-info}/RECORD +14 -14
- {aot_biomaps-2.9.279.dist-info → aot_biomaps-2.9.300.dist-info}/WHEEL +0 -0
- {aot_biomaps-2.9.279.dist-info → aot_biomaps-2.9.300.dist-info}/top_level.txt +0 -0
|
Binary file
|
|
@@ -45,8 +45,6 @@ class AlgebraicRecon(Recon):
|
|
|
45
45
|
|
|
46
46
|
self.sparseThreshold = sparseThreshold
|
|
47
47
|
|
|
48
|
-
self.Z_dim = None # Used for sparse matrix reconstruction
|
|
49
|
-
|
|
50
48
|
if self.numIterations <= 0:
|
|
51
49
|
raise ValueError("Number of iterations must be greater than 0.")
|
|
52
50
|
if self.numSubsets <= 0:
|
|
@@ -760,7 +758,6 @@ class AlgebraicRecon(Recon):
|
|
|
760
758
|
max_saves=self.maxSaves,
|
|
761
759
|
show_logs=show_logs,
|
|
762
760
|
smatrixType=self.smatrixType,
|
|
763
|
-
Z=self.Z_dim
|
|
764
761
|
)
|
|
765
762
|
else:
|
|
766
763
|
self.reconLaser, self.indices = MLEM(SMatrix=self.SMatrix,
|
|
@@ -774,7 +771,6 @@ class AlgebraicRecon(Recon):
|
|
|
774
771
|
max_saves=self.maxSaves,
|
|
775
772
|
show_logs=show_logs,
|
|
776
773
|
smatrixType=self.smatrixType,
|
|
777
|
-
Z=self.Z_dim
|
|
778
774
|
)
|
|
779
775
|
elif self.optimizer.value == OptimizerType.LS.value:
|
|
780
776
|
if self.alpha is None:
|
|
@@ -790,8 +786,7 @@ class AlgebraicRecon(Recon):
|
|
|
790
786
|
denominator_threshold=self.denominatorThreshold,
|
|
791
787
|
max_saves=self.maxSaves,
|
|
792
788
|
show_logs=show_logs,
|
|
793
|
-
smatrixType=self.smatrixType
|
|
794
|
-
Z=self.Z_dim
|
|
789
|
+
smatrixType=self.smatrixType
|
|
795
790
|
)
|
|
796
791
|
else:
|
|
797
792
|
self.reconLaser, self.indices = LS(SMatrix=self.SMatrix,
|
|
@@ -805,8 +800,7 @@ class AlgebraicRecon(Recon):
|
|
|
805
800
|
denominator_threshold=self.denominatorThreshold,
|
|
806
801
|
max_saves=self.maxSaves,
|
|
807
802
|
show_logs=show_logs,
|
|
808
|
-
smatrixType=self.smatrixType
|
|
809
|
-
Z=self.Z_dim
|
|
803
|
+
smatrixType=self.smatrixType
|
|
810
804
|
)
|
|
811
805
|
else:
|
|
812
806
|
raise ValueError(f"Only MLEM and LS are supported for simple algebraic reconstruction. {self.optimizer.value} need Bayesian reconstruction")
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from AOT_biomaps.AOT_Recon.AlgebraicRecon import AlgebraicRecon
|
|
2
|
-
from AOT_biomaps.AOT_Recon.ReconEnums import ReconType, ProcessType
|
|
2
|
+
from AOT_biomaps.AOT_Recon.ReconEnums import ReconType, ProcessType, SMatrixType
|
|
3
3
|
from AOT_biomaps.AOT_Recon.AOT_Optimizers import CP_KL, CP_TV
|
|
4
4
|
from AOT_biomaps.AOT_Recon.ReconEnums import OptimizerType
|
|
5
5
|
|
|
@@ -13,11 +13,20 @@ class PrimalDualRecon(AlgebraicRecon):
|
|
|
13
13
|
This class implements the convex reconstruction process.
|
|
14
14
|
It currently does not perform any operations but serves as a template for future implementations.
|
|
15
15
|
"""
|
|
16
|
-
def __init__(self, theta=1.0, L=None, **kwargs):
|
|
16
|
+
def __init__(self, alpha, beta, theta=1.0, L=None, k_security=0.8, use_power_method=True, auto_alpha_gamma=0.05, apply_positivity_clamp=True, tikhonov_as_gradient=False, use_laplacian=True, laplacian_beta_scale=1.0, **kwargs):
|
|
17
17
|
super().__init__(**kwargs)
|
|
18
18
|
self.reconType = ReconType.Convex
|
|
19
|
+
self.alpha = alpha # TV regularization parameter (if None, alpha is auto-scaled)
|
|
20
|
+
self.beta=beta # Tikhonov regularization parameter
|
|
19
21
|
self.theta = theta # relaxation parameter (between 1 and 2)
|
|
20
22
|
self.L = L # norme spectrale de l'opérateur linéaire défini par les matrices P et P^T
|
|
23
|
+
self.k_security=k_security
|
|
24
|
+
self.use_power_method=use_power_method
|
|
25
|
+
self.auto_alpha_gamma=auto_alpha_gamma # gamma for auto alpha: alpha = gamma * data_term / tv_term
|
|
26
|
+
self.apply_positivity_clamp=apply_positivity_clamp
|
|
27
|
+
self.tikhonov_as_gradient=tikhonov_as_gradient # if True, apply -tau*2*beta*x instead of prox multiplicative
|
|
28
|
+
self.use_laplacian=use_laplacian # enable Laplacian (Hessian scalar) penalty
|
|
29
|
+
self.laplacian_beta_scale=laplacian_beta_scale # multiply beta for laplacian term if you want separate scaling
|
|
21
30
|
|
|
22
31
|
def run(self, processType=ProcessType.PYTHON, withTumor=True):
|
|
23
32
|
"""
|
|
@@ -149,56 +158,100 @@ class PrimalDualRecon(AlgebraicRecon):
|
|
|
149
158
|
if show_logs:
|
|
150
159
|
print(f"Loaded reconstruction results and indices from {results_dir}")
|
|
151
160
|
|
|
152
|
-
def _convexReconPython(self, withTumor):
|
|
161
|
+
def _convexReconPython(self, withTumor,show_logs=True):
|
|
153
162
|
if self.optimizer == OptimizerType.CP_TV:
|
|
154
163
|
if withTumor:
|
|
155
164
|
self.reconPhantom, self.indices = CP_TV(
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
165
|
+
SMatrix = self.SMatrix,
|
|
166
|
+
y = self.experiment.AOsignal_withTumor,
|
|
167
|
+
alpha=self.alpha,
|
|
168
|
+
beta=self.beta,
|
|
169
|
+
theta=self.theta,
|
|
170
|
+
numIterations=self.numIterations,
|
|
171
|
+
isSavingEachIteration=self.isSavingEachIteration,
|
|
172
|
+
L=self.L,
|
|
173
|
+
withTumor=withTumor,
|
|
174
|
+
device=self.device,
|
|
175
|
+
max_saves=self.maxSaves,
|
|
176
|
+
show_logs=show_logs,
|
|
177
|
+
smatrixType= self.smatrixType,
|
|
178
|
+
k_security=self.k_security,
|
|
179
|
+
use_power_method=self.use_power_method,
|
|
180
|
+
auto_alpha_gamma=self.auto_alpha_gamma,
|
|
181
|
+
apply_positivity_clamp=self.apply_positivity_clamp,
|
|
182
|
+
tikhonov_as_gradient=self.tikhonov_as_gradient,
|
|
183
|
+
use_laplacian=self.use_laplacian,
|
|
184
|
+
laplacian_beta_scale=self.laplacian_beta_scale
|
|
185
|
+
)
|
|
166
186
|
else:
|
|
167
187
|
self.reconLaser, self.indices = CP_TV(
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
188
|
+
SMatrix = self.SMatrix,
|
|
189
|
+
y = self.experiment.AOsignal_withoutTumor,
|
|
190
|
+
alpha=self.alpha,
|
|
191
|
+
beta=self.beta,
|
|
192
|
+
theta=self.theta,
|
|
193
|
+
numIterations=self.numIterations,
|
|
194
|
+
isSavingEachIteration=self.isSavingEachIteration,
|
|
195
|
+
L=self.L,
|
|
196
|
+
withTumor=withTumor,
|
|
197
|
+
device=self.device,
|
|
198
|
+
max_saves=self.maxSaves,
|
|
199
|
+
show_logs=show_logs,
|
|
200
|
+
smatrixType= self.smatrixType,
|
|
201
|
+
k_security=self.k_security,
|
|
202
|
+
use_power_method=self.use_power_method,
|
|
203
|
+
auto_alpha_gamma=self.auto_alpha_gamma,
|
|
204
|
+
apply_positivity_clamp=self.apply_positivity_clamp,
|
|
205
|
+
tikhonov_as_gradient=self.tikhonov_as_gradient,
|
|
206
|
+
use_laplacian=self.use_laplacian,
|
|
207
|
+
laplacian_beta_scale=self.laplacian_beta_scale
|
|
208
|
+
)
|
|
178
209
|
elif self.optimizer == OptimizerType.CP_KL:
|
|
179
210
|
if withTumor:
|
|
180
211
|
self.reconPhantom, self.indices = CP_KL(
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
212
|
+
SMatrix = self.SMatrix,
|
|
213
|
+
y = self.experiment.AOsignal_withTumor,
|
|
214
|
+
alpha=self.alpha,
|
|
215
|
+
beta=self.beta,
|
|
216
|
+
theta=self.theta,
|
|
217
|
+
numIterations=self.numIterations,
|
|
218
|
+
isSavingEachIteration=self.isSavingEachIteration,
|
|
219
|
+
L=self.L,
|
|
220
|
+
withTumor=withTumor,
|
|
221
|
+
device=self.device,
|
|
222
|
+
max_saves=self.maxSaves,
|
|
223
|
+
show_logs=show_logs,
|
|
224
|
+
smatrixType= self.smatrixType,
|
|
225
|
+
k_security=self.k_security,
|
|
226
|
+
use_power_method=self.use_power_method,
|
|
227
|
+
auto_alpha_gamma=self.auto_alpha_gamma,
|
|
228
|
+
apply_positivity_clamp=self.apply_positivity_clamp,
|
|
229
|
+
tikhonov_as_gradient=self.tikhonov_as_gradient,
|
|
230
|
+
use_laplacian=self.use_laplacian,
|
|
231
|
+
laplacian_beta_scale=self.laplacian_beta_scale
|
|
190
232
|
)
|
|
191
233
|
else:
|
|
192
234
|
self.reconLaser, self.indices = CP_KL(
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
235
|
+
SMatrix = self.SMatrix,
|
|
236
|
+
y = self.experiment.AOsignal_withoutTumor,
|
|
237
|
+
alpha=self.alpha,
|
|
238
|
+
beta=self.beta,
|
|
239
|
+
theta=self.theta,
|
|
240
|
+
numIterations=self.numIterations,
|
|
241
|
+
isSavingEachIteration=self.isSavingEachIteration,
|
|
242
|
+
L=self.L,
|
|
243
|
+
withTumor=withTumor,
|
|
244
|
+
device=self.device,
|
|
245
|
+
max_saves=self.maxSaves,
|
|
246
|
+
show_logs=show_logs,
|
|
247
|
+
smatrixType= self.smatrixType,
|
|
248
|
+
k_security=self.k_security,
|
|
249
|
+
use_power_method=self.use_power_method,
|
|
250
|
+
auto_alpha_gamma=self.auto_alpha_gamma,
|
|
251
|
+
apply_positivity_clamp=self.apply_positivity_clamp,
|
|
252
|
+
tikhonov_as_gradient=self.tikhonov_as_gradient,
|
|
253
|
+
use_laplacian=self.use_laplacian,
|
|
254
|
+
laplacian_beta_scale=self.laplacian_beta_scale
|
|
202
255
|
)
|
|
203
256
|
else:
|
|
204
257
|
raise ValueError(f"Optimizer value must be CP_TV or CP_KL, got {self.optimizer}")
|
|
@@ -380,6 +380,21 @@ def filter_radon(f, N, filter_type, Fc):
|
|
|
380
380
|
|
|
381
381
|
return FILTER
|
|
382
382
|
|
|
383
|
+
def compute_TV_cpu(x, Z, X, isotropic=False):
|
|
384
|
+
"""
|
|
385
|
+
Compute total variation of x (1D flattened of shape Z*X).
|
|
386
|
+
isotropic=False -> anisotropic (sum |dx| + |dy|)
|
|
387
|
+
isotropic=True -> isotropic sqrt(dx^2 + dy^2)
|
|
388
|
+
"""
|
|
389
|
+
x2d = x.reshape(Z, X)
|
|
390
|
+
dx = np.diff(x2d, axis=1)
|
|
391
|
+
dy = np.diff(x2d, axis=0)
|
|
392
|
+
if isotropic:
|
|
393
|
+
# pad to original size for consistent measure (we only need sum of norms)
|
|
394
|
+
mags = np.sqrt(dx**2 + dy**2)
|
|
395
|
+
return float(np.sum(mags))
|
|
396
|
+
else:
|
|
397
|
+
return float(np.sum(np.abs(dx)) + np.sum(np.abs(dy)))
|
|
383
398
|
|
|
384
399
|
def get_apodization_vector_gpu(matrix_sparse_obj):
|
|
385
400
|
"""
|
|
@@ -409,4 +424,66 @@ def get_apodization_vector_gpu(matrix_sparse_obj):
|
|
|
409
424
|
|
|
410
425
|
print(f"✅ Vecteur de fenêtrage (Z*X={Z*X}) généré et transféré sur GPU.")
|
|
411
426
|
|
|
412
|
-
return fenetre_gpu
|
|
427
|
+
return fenetre_gpu
|
|
428
|
+
|
|
429
|
+
def _call_axpby(axpby_kernel, out_ptr, x_ptr, y_ptr, a, b, N, stream, block):
|
|
430
|
+
grid = ((int(N) + block - 1) // block, 1, 1)
|
|
431
|
+
axpby_kernel(out_ptr, x_ptr, y_ptr,
|
|
432
|
+
np.float32(a), np.float32(b),
|
|
433
|
+
np.int32(N),
|
|
434
|
+
block=(block, 1, 1), grid=grid, stream=stream)
|
|
435
|
+
|
|
436
|
+
def _call_minus_axpy(minus_kernel, out_ptr, z_ptr, a, N, stream, block):
|
|
437
|
+
grid = ((int(N) + block - 1) // block, 1, 1)
|
|
438
|
+
minus_kernel(out_ptr, z_ptr, np.float32(a), np.int32(N),
|
|
439
|
+
block=(block, 1, 1), grid=grid, stream=stream)
|
|
440
|
+
|
|
441
|
+
def power_method_estimate_L__SELL(SMatrix, stream, n_it=20, block_size=256):
|
|
442
|
+
"""Estimate ||A||^2 using power method (uses your projection/backprojection kernels)."""
|
|
443
|
+
TN = int(SMatrix.N * SMatrix.T)
|
|
444
|
+
ZX = int(SMatrix.Z * SMatrix.X)
|
|
445
|
+
proj = SMatrix.sparse_mod.get_function("projection_kernel__SELL")
|
|
446
|
+
back = SMatrix.sparse_mod.get_function("backprojection_kernel__SELL")
|
|
447
|
+
TN_i = np.int32(TN)
|
|
448
|
+
ZX_i = np.int32(ZX)
|
|
449
|
+
slice_h = np.int32(SMatrix.slice_height)
|
|
450
|
+
grid_rows = ((TN + block_size - 1) // block_size, 1, 1)
|
|
451
|
+
block_1D = (block_size, 1, 1)
|
|
452
|
+
|
|
453
|
+
dtype = np.float32
|
|
454
|
+
x_host = np.random.randn(ZX).astype(dtype)
|
|
455
|
+
x_host /= np.linalg.norm(x_host) + 1e-12
|
|
456
|
+
x_gpu = drv.mem_alloc(x_host.nbytes)
|
|
457
|
+
drv.memcpy_htod_async(x_gpu, x_host, stream)
|
|
458
|
+
q_gpu = drv.mem_alloc(TN * np.dtype(dtype).itemsize)
|
|
459
|
+
ATq_gpu = drv.mem_alloc(ZX * np.dtype(dtype).itemsize)
|
|
460
|
+
ATq_host = np.empty(ZX, dtype=dtype)
|
|
461
|
+
|
|
462
|
+
for _ in range(n_it):
|
|
463
|
+
proj(q_gpu, SMatrix.sell_values_gpu, SMatrix.sell_colinds_gpu, SMatrix.slice_ptr_gpu, SMatrix.slice_len_gpu,
|
|
464
|
+
x_gpu, TN_i, slice_h, block=block_1D, grid=grid_rows, stream=stream)
|
|
465
|
+
drv.memset_d32_async(ATq_gpu, 0, ZX, stream)
|
|
466
|
+
back(SMatrix.sell_values_gpu, SMatrix.sell_colinds_gpu, SMatrix.slice_ptr_gpu, SMatrix.slice_len_gpu,
|
|
467
|
+
q_gpu, ATq_gpu, TN_i, slice_h, block=block_1D, grid=grid_rows, stream=stream)
|
|
468
|
+
stream.synchronize()
|
|
469
|
+
drv.memcpy_dtoh(ATq_host, ATq_gpu)
|
|
470
|
+
norm = np.linalg.norm(ATq_host)
|
|
471
|
+
if norm < 1e-12:
|
|
472
|
+
break
|
|
473
|
+
x_host = ATq_host / norm
|
|
474
|
+
drv.memcpy_htod_async(x_gpu, x_host, stream)
|
|
475
|
+
# final Rayleigh quotient
|
|
476
|
+
proj(q_gpu, SMatrix.sell_values_gpu, SMatrix.sell_colinds_gpu, SMatrix.slice_ptr_gpu, SMatrix.slice_len_gpu,
|
|
477
|
+
x_gpu, TN_i, slice_h, block=block_1D, grid=grid_rows, stream=stream)
|
|
478
|
+
drv.memset_d32_async(ATq_gpu, 0, ZX, stream)
|
|
479
|
+
back(SMatrix.sell_values_gpu, SMatrix.sell_colinds_gpu, SMatrix.slice_ptr_gpu, SMatrix.slice_len_gpu,
|
|
480
|
+
q_gpu, ATq_gpu, TN_i, slice_h, block=block_1D, grid=grid_rows, stream=stream)
|
|
481
|
+
stream.synchronize()
|
|
482
|
+
drv.memcpy_dtoh(ATq_host, ATq_gpu)
|
|
483
|
+
L_sq = float(np.dot(x_host, ATq_host))
|
|
484
|
+
for g in (x_gpu, q_gpu, ATq_gpu):
|
|
485
|
+
try:
|
|
486
|
+
g.free()
|
|
487
|
+
except:
|
|
488
|
+
pass
|
|
489
|
+
return max(L_sq, 1e-6)
|
AOT_biomaps/__init__.py
CHANGED
|
@@ -85,7 +85,7 @@ from .AOT_Recon.AOT_PotentialFunctions.RelativeDifferences import *
|
|
|
85
85
|
from .Config import config
|
|
86
86
|
from .Settings import *
|
|
87
87
|
|
|
88
|
-
__version__ = '2.9.
|
|
88
|
+
__version__ = '2.9.300'
|
|
89
89
|
__process__ = config.get_process()
|
|
90
90
|
|
|
91
91
|
def initialize(process=None):
|
|
@@ -135,6 +135,27 @@ def initialize(process=None):
|
|
|
135
135
|
|
|
136
136
|
|
|
137
137
|
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
|
|
138
159
|
|
|
139
160
|
|
|
140
161
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
AOT_biomaps/Config.py,sha256=ghEOP1n8aO1pR-su13wMeAZAxZRfry5hH67NbtZ8SqI,3614
|
|
2
2
|
AOT_biomaps/Settings.py,sha256=v8fPhnvvcfBJP29m1RLOTEr3jndGLGwbUiORXmsj2Bo,2853
|
|
3
|
-
AOT_biomaps/__init__.py,sha256=
|
|
3
|
+
AOT_biomaps/__init__.py,sha256=GMzj8PLP9_pgyMqMfNa2NB6nka1mq-xDKBhb3hxBw8Q,4262
|
|
4
4
|
AOT_biomaps/AOT_Acoustic/AcousticEnums.py,sha256=s5kXa6jKzbS4btwbubrVcynLOr0yg5tth5vL_FGfbMk,1802
|
|
5
5
|
AOT_biomaps/AOT_Acoustic/AcousticTools.py,sha256=al7xXKMY5e-qQQ7nrQVPVAmqYiB320OluNlY6ti8iKc,7539
|
|
6
6
|
AOT_biomaps/AOT_Acoustic/FocusedWave.py,sha256=3kGKKDx_3Msy5COYqIwzROPORGWvNjw8UsDanBfkMXE,11037
|
|
@@ -18,30 +18,30 @@ AOT_biomaps/AOT_Optic/Laser.py,sha256=uzQwxswjU0kZWix3CmZLoWmhsBa3VhN27STprNv-xB
|
|
|
18
18
|
AOT_biomaps/AOT_Optic/OpticEnums.py,sha256=b349_JyjHqQohmjK4Wke-A_HLGaqb3_BKbyUqFC4jxY,499
|
|
19
19
|
AOT_biomaps/AOT_Optic/__init__.py,sha256=HSUVhfz0NzwHHZZ9KP9Xyfu33IgP_rYJX86J-gEROlo,321
|
|
20
20
|
AOT_biomaps/AOT_Optic/_mainOptic.py,sha256=Wk63CcgWbU-ygMfjNK80islaUbGGJpTXgZY3_C2KQNY,8179
|
|
21
|
-
AOT_biomaps/AOT_Recon/AOT_biomaps_kernels.cubin,sha256=
|
|
22
|
-
AOT_biomaps/AOT_Recon/AlgebraicRecon.py,sha256=
|
|
21
|
+
AOT_biomaps/AOT_Recon/AOT_biomaps_kernels.cubin,sha256=Li4HdWpr65ONf82FqFAjZ8w3ob9UuJucDWGAAvBF77Q,83680
|
|
22
|
+
AOT_biomaps/AOT_Recon/AlgebraicRecon.py,sha256=CGBXZyYEZ3TOTFOKSt-h7NGuFbuI9PNr3YTWTbSLxDo,46832
|
|
23
23
|
AOT_biomaps/AOT_Recon/AnalyticRecon.py,sha256=RaQ5AJ1HUmSct0BgjZ0GWSJg7SALCn3Q0laqj1yyhAE,7123
|
|
24
24
|
AOT_biomaps/AOT_Recon/BayesianRecon.py,sha256=RnnPa-tTcvirwiNPnCRZnSM4NWeEEltYET-piBbp34g,12671
|
|
25
25
|
AOT_biomaps/AOT_Recon/DeepLearningRecon.py,sha256=RfVcEsi4GeGqJn0_SPxwQPQx6IQjin79WKh2UarMRLI,1383
|
|
26
|
-
AOT_biomaps/AOT_Recon/PrimalDualRecon.py,sha256
|
|
26
|
+
AOT_biomaps/AOT_Recon/PrimalDualRecon.py,sha256=JbFhxiyUoSTnlJgHbOWIfUUwhwfZoi39RJMnfkagegY,16504
|
|
27
27
|
AOT_biomaps/AOT_Recon/ReconEnums.py,sha256=KAf55RqHAr2ilt6pxFrUBGQOn-7HA8NP6TyL-1FNiXo,19714
|
|
28
|
-
AOT_biomaps/AOT_Recon/ReconTools.py,sha256=
|
|
28
|
+
AOT_biomaps/AOT_Recon/ReconTools.py,sha256=A4IQV7IETu9MgYr7hjLNPTImzjf8CEU4cZ2e0EgJNWA,19878
|
|
29
29
|
AOT_biomaps/AOT_Recon/__init__.py,sha256=xs_argJqXKFl76xP7-jiUc1ynOEEtY7XZ0gDxD5uVZc,246
|
|
30
30
|
AOT_biomaps/AOT_Recon/_mainRecon.py,sha256=exoa2UBMfMHjemxAU9dW0mhEfsP6Oe1qjSfrTrgbIcY,13125
|
|
31
31
|
AOT_biomaps/AOT_Recon/AOT_Optimizers/DEPIERRO.py,sha256=qA1n722GLQJH3V8HcLr5q_GxEwBS_NRlIT3E6JZk-Ag,9479
|
|
32
|
-
AOT_biomaps/AOT_Recon/AOT_Optimizers/LS.py,sha256=
|
|
32
|
+
AOT_biomaps/AOT_Recon/AOT_Optimizers/LS.py,sha256=bCu1rKzFXPbYQ7jV3L3E_jVQpb6LIEC5MIlN1-mCNdY,22814
|
|
33
33
|
AOT_biomaps/AOT_Recon/AOT_Optimizers/MAPEM.py,sha256=vQLCB0L4FSXJKn2_6kdIdWrI6WZ82KuqUh7CSqBGVuo,25766
|
|
34
|
-
AOT_biomaps/AOT_Recon/AOT_Optimizers/MLEM.py,sha256=
|
|
35
|
-
AOT_biomaps/AOT_Recon/AOT_Optimizers/PDHG.py,sha256=
|
|
34
|
+
AOT_biomaps/AOT_Recon/AOT_Optimizers/MLEM.py,sha256=TK-yE3zNLzGoau2dXALy__s5mavKt213HAaJ-gYfbzg,22427
|
|
35
|
+
AOT_biomaps/AOT_Recon/AOT_Optimizers/PDHG.py,sha256=oSojwug5mcZedKOWAV7YPMlCp0Qy_Aed0fjHRuyZWpo,28622
|
|
36
36
|
AOT_biomaps/AOT_Recon/AOT_Optimizers/__init__.py,sha256=tNGVulINaqQZzcs5cvCMAT5ypGdoFWRnxtl9y7ePECk,106
|
|
37
37
|
AOT_biomaps/AOT_Recon/AOT_PotentialFunctions/Huber.py,sha256=dRd1t5OBag_gVmfji3L0QrA1GJ_702LcCkLH32Bot0M,3285
|
|
38
38
|
AOT_biomaps/AOT_Recon/AOT_PotentialFunctions/Quadratic.py,sha256=wTbzcXxMdEl9ReEXrL43DOJQecokBwJYU_s2kQUASZY,2545
|
|
39
39
|
AOT_biomaps/AOT_Recon/AOT_PotentialFunctions/RelativeDifferences.py,sha256=ZlWaKsNPCMfy4fWxYFT2pSoKMbysQkJH4N1WbbWncq4,2493
|
|
40
40
|
AOT_biomaps/AOT_Recon/AOT_PotentialFunctions/__init__.py,sha256=RwrJdLOFbAFBFnRxo5xdlOyeZgtQRDaRWDN9-uCGUiY,84
|
|
41
|
-
AOT_biomaps/AOT_Recon/AOT_SparseSMatrix/SparseSMatrix_CSR.py,sha256=
|
|
42
|
-
AOT_biomaps/AOT_Recon/AOT_SparseSMatrix/SparseSMatrix_SELL.py,sha256=
|
|
41
|
+
AOT_biomaps/AOT_Recon/AOT_SparseSMatrix/SparseSMatrix_CSR.py,sha256=RACc2P5oxmp0uPLAGnNj9mEtAxa_OlepNgCawKij3jI,12062
|
|
42
|
+
AOT_biomaps/AOT_Recon/AOT_SparseSMatrix/SparseSMatrix_SELL.py,sha256=leJcC1dsWlvHqsZFJqdGD49w28AHIAVbUAVBumw0OIA,14378
|
|
43
43
|
AOT_biomaps/AOT_Recon/AOT_SparseSMatrix/__init__.py,sha256=8nou-hqjQjuCTLhoL5qv4EM_lMPFviAZAZKSPhi84jE,67
|
|
44
|
-
aot_biomaps-2.9.
|
|
45
|
-
aot_biomaps-2.9.
|
|
46
|
-
aot_biomaps-2.9.
|
|
47
|
-
aot_biomaps-2.9.
|
|
44
|
+
aot_biomaps-2.9.300.dist-info/METADATA,sha256=2J-56TTNn-gQSZ0idm0PTSNQWc1KSmzvNXrfoH27O50,700
|
|
45
|
+
aot_biomaps-2.9.300.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
46
|
+
aot_biomaps-2.9.300.dist-info/top_level.txt,sha256=6STF-lT4kaAnBHJYCripmN5mZABoHjMuY689JdiDphk,12
|
|
47
|
+
aot_biomaps-2.9.300.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|