AOT-biomaps 2.9.212__py3-none-any.whl → 2.9.233__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_Experiment/Tomography.py +70 -0
- AOT_biomaps/AOT_Experiment/_mainExperiment.py +41 -22
- AOT_biomaps/AOT_Recon/AOT_Optimizers/DEPIERRO.py +48 -11
- AOT_biomaps/AOT_Recon/AOT_Optimizers/LS.py +9 -6
- AOT_biomaps/AOT_Recon/AOT_Optimizers/MAPEM.py +118 -38
- AOT_biomaps/AOT_Recon/AOT_Optimizers/MLEM.py +157 -86
- AOT_biomaps/AOT_Recon/AOT_PotentialFunctions/RelativeDifferences.py +10 -14
- AOT_biomaps/AOT_Recon/AlgebraicRecon.py +337 -185
- AOT_biomaps/AOT_Recon/BayesianRecon.py +33 -96
- AOT_biomaps/AOT_Recon/PrimalDualRecon.py +14 -18
- AOT_biomaps/AOT_Recon/ReconEnums.py +14 -0
- AOT_biomaps/AOT_Recon/ReconTools.py +4 -3
- AOT_biomaps/AOT_Recon/_mainRecon.py +3 -2
- AOT_biomaps/__init__.py +22 -1
- {aot_biomaps-2.9.212.dist-info → aot_biomaps-2.9.233.dist-info}/METADATA +1 -1
- {aot_biomaps-2.9.212.dist-info → aot_biomaps-2.9.233.dist-info}/RECORD +18 -18
- {aot_biomaps-2.9.212.dist-info → aot_biomaps-2.9.233.dist-info}/WHEEL +0 -0
- {aot_biomaps-2.9.212.dist-info → aot_biomaps-2.9.233.dist-info}/top_level.txt +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from AOT_biomaps.AOT_Recon.AlgebraicRecon import AlgebraicRecon
|
|
2
2
|
from AOT_biomaps.AOT_Recon.ReconEnums import ReconType, OptimizerType, PotentialType, ProcessType
|
|
3
3
|
from .ReconTools import check_gpu_memory, calculate_memory_requirement
|
|
4
|
-
from .AOT_Optimizers import MAPEM, DEPIERRO
|
|
4
|
+
from .AOT_Optimizers import MAPEM, MAPEM_STOP, DEPIERRO
|
|
5
5
|
from AOT_biomaps.Config import config
|
|
6
6
|
|
|
7
7
|
import warnings
|
|
@@ -66,13 +66,15 @@ class BayesianRecon(AlgebraicRecon):
|
|
|
66
66
|
dir_name += f'_Beta_{self.beta}_Sigma_{self.sigma}'
|
|
67
67
|
|
|
68
68
|
results_dir = os.path.join(self.saveDir, dir_name)
|
|
69
|
+
if not os.path.exists(results_dir):
|
|
70
|
+
os.makedirs(results_dir)
|
|
69
71
|
|
|
70
|
-
if os.path.exists(os.path.join(results_dir,"
|
|
72
|
+
if os.path.exists(os.path.join(results_dir,"indices.npy")):
|
|
71
73
|
return (True, results_dir)
|
|
72
74
|
|
|
73
75
|
return (False, results_dir)
|
|
74
76
|
|
|
75
|
-
def load(self, withTumor=True, results_date=None, optimizer=None, potential_function=None, filePath=None):
|
|
77
|
+
def load(self, withTumor=True, results_date=None, optimizer=None, potential_function=None, filePath=None, show_logs=True):
|
|
76
78
|
"""
|
|
77
79
|
Load the reconstruction results and indices as lists of 2D np arrays for Bayesian reconstruction and store them in self.
|
|
78
80
|
If the loaded file is a 3D array, it is split into a list of 2D arrays.
|
|
@@ -98,7 +100,7 @@ class BayesianRecon(AlgebraicRecon):
|
|
|
98
100
|
else:
|
|
99
101
|
self.reconLaser = data
|
|
100
102
|
# Essayer de charger les indices
|
|
101
|
-
base_dir,
|
|
103
|
+
base_dir, _ = os.path.split(recon_path)
|
|
102
104
|
indices_path = os.path.join(base_dir, 'indices.npy')
|
|
103
105
|
if os.path.exists(indices_path):
|
|
104
106
|
indices_data = np.load(indices_path, allow_pickle=True)
|
|
@@ -108,7 +110,8 @@ class BayesianRecon(AlgebraicRecon):
|
|
|
108
110
|
self.indices = indices_data
|
|
109
111
|
else:
|
|
110
112
|
self.indices = None
|
|
111
|
-
|
|
113
|
+
if show_logs:
|
|
114
|
+
print(f"Loaded reconstruction results and indices from {recon_path}")
|
|
112
115
|
else:
|
|
113
116
|
# Mode chargement depuis le répertoire de résultats
|
|
114
117
|
if self.saveDir is None:
|
|
@@ -171,9 +174,10 @@ class BayesianRecon(AlgebraicRecon):
|
|
|
171
174
|
self.indices = [indices_data[i, :, :] for i in range(indices_data.shape[0])]
|
|
172
175
|
else:
|
|
173
176
|
self.indices = indices_data
|
|
174
|
-
|
|
177
|
+
if show_logs:
|
|
178
|
+
print(f"Loaded reconstruction results and indices from {results_dir}")
|
|
175
179
|
|
|
176
|
-
def run(self, processType=ProcessType.PYTHON, withTumor=True):
|
|
180
|
+
def run(self, processType=ProcessType.PYTHON, withTumor=True, show_logs=True):
|
|
177
181
|
"""
|
|
178
182
|
This method is a placeholder for the Bayesian reconstruction process.
|
|
179
183
|
It currently does not perform any operations but serves as a template for future implementations.
|
|
@@ -185,109 +189,42 @@ class BayesianRecon(AlgebraicRecon):
|
|
|
185
189
|
else:
|
|
186
190
|
raise ValueError(f"Unknown Bayesian reconstruction type: {processType}")
|
|
187
191
|
|
|
188
|
-
def _bayesianReconCASToR(self, withTumor):
|
|
192
|
+
def _bayesianReconCASToR(self, show_logs, withTumor):
|
|
189
193
|
raise NotImplementedError("CASToR Bayesian reconstruction is not implemented yet.")
|
|
190
194
|
|
|
191
|
-
def _bayesianReconPython(self, withTumor):
|
|
192
|
-
|
|
195
|
+
def _bayesianReconPython(self, show_logs, withTumor):
|
|
193
196
|
if withTumor:
|
|
194
197
|
if self.experiment.AOsignal_withTumor is None:
|
|
195
198
|
raise ValueError("AO signal with tumor is not available. Please generate AO signal with tumor the experiment first in the experiment object.")
|
|
196
199
|
if self.optimizer.value == OptimizerType.PPGMLEM.value:
|
|
197
|
-
self.reconPhantom, self.indices =
|
|
200
|
+
self.reconPhantom, self.indices = MAPEM_STOP(
|
|
201
|
+
SMatrix=self.SMatrix,
|
|
202
|
+
y=self.experiment.AOsignal_withTumor,
|
|
203
|
+
Omega=self.potentialFunction,
|
|
204
|
+
beta=self.beta,
|
|
205
|
+
delta=self.delta,
|
|
206
|
+
gamma=self.gamma,
|
|
207
|
+
sigma=self.sigma,
|
|
208
|
+
numIterations=self.numIterations,
|
|
209
|
+
isSavingEachIteration=self.isSavingEachIteration,
|
|
210
|
+
withTumor=withTumor,
|
|
211
|
+
device=self.device,
|
|
212
|
+
max_saves=5000,
|
|
213
|
+
show_logs=True)
|
|
198
214
|
elif self.optimizer.value == OptimizerType.PGC.value:
|
|
199
|
-
self.reconPhantom, self.indices =
|
|
215
|
+
self.reconPhantom, self.indices = MAPEM(SMatrix=self.SMatrix, y=self.experiment.AOsignal_withTumor, withTumor=withTumor, show_logs=show_logs)
|
|
200
216
|
elif self.optimizer.value == OptimizerType.DEPIERRO95.value:
|
|
201
|
-
self.reconPhantom, self.indices =
|
|
217
|
+
self.reconPhantom, self.indices = DEPIERRO(SMatrix=self.SMatrix, y=self.experiment.AOsignal_withTumor, withTumor=withTumor, show_logs=show_logs)
|
|
202
218
|
else:
|
|
203
219
|
raise ValueError(f"Unknown optimizer type: {self.optimizer.value}")
|
|
204
220
|
else:
|
|
205
221
|
if self.experiment.AOsignal_withoutTumor is None:
|
|
206
222
|
raise ValueError("AO signal without tumor is not available. Please generate AO signal without tumor the experiment first in the experiment object.")
|
|
207
223
|
if self.optimizer.value == OptimizerType.PPGMLEM.value:
|
|
208
|
-
self.reconLaser, self.indices =
|
|
224
|
+
self.reconLaser, self.indices = MAPEM_STOP(SMatrix=self.SMatrix, y=self.experiment.AOsignal_withoutTumor, withTumor=withTumor, show_logs=show_logs)
|
|
209
225
|
elif self.optimizer.value == OptimizerType.PGC.value:
|
|
210
|
-
self.reconLaser, self.indices =
|
|
226
|
+
self.reconLaser, self.indices = MAPEM(SMatrix=self.SMatrix, y=self.experiment.AOsignal_withoutTumor, withTumor=withTumor, show_logs=show_logs)
|
|
211
227
|
elif self.optimizer.value == OptimizerType.DEPIERRO95.value:
|
|
212
|
-
self.reconLaser, self.indices =
|
|
213
|
-
else:
|
|
214
|
-
raise ValueError(f"Unknown optimizer type: {self.optimizer.value}")
|
|
215
|
-
|
|
216
|
-
def _MAPEM_STOP(self, SMatrix, y, withTumor):
|
|
217
|
-
"""
|
|
218
|
-
This method implements the MAPEM_STOP algorithm using either CPU or single-GPU PyTorch acceleration.
|
|
219
|
-
Multi-GPU and Multi-CPU modes are not implemented for this algorithm.
|
|
220
|
-
"""
|
|
221
|
-
result = None
|
|
222
|
-
required_memory = calculate_memory_requirement(SMatrix, y)
|
|
223
|
-
|
|
224
|
-
if self.isGPU:
|
|
225
|
-
if check_gpu_memory(config.select_best_gpu(), required_memory):
|
|
226
|
-
try:
|
|
227
|
-
result = MAPEM._MAPEM_GPU_STOP(SMatrix=SMatrix, y=y, Omega=self.potentialFunction, numIterations=self.numIterations, beta=self.beta, delta=self.delta, gamma=self.gamma, sigma=self.sigma, isSavingEachIteration=self.isSavingEachIteration, withTumor=withTumor)
|
|
228
|
-
except Exception as e:
|
|
229
|
-
warnings.warn(f"Falling back to CPU implementation due to an error in GPU implementation: {e}")
|
|
230
|
-
else:
|
|
231
|
-
warnings.warn("Insufficient GPU memory for single GPU MAPEM_STOP. Falling back to CPU.")
|
|
232
|
-
|
|
233
|
-
if result is None:
|
|
234
|
-
try:
|
|
235
|
-
result = MAPEM._MAPEM_CPU_STOP(SMatrix=SMatrix, y=y, Omega=self.potentialFunction, numIterations=self.numIterations, beta=self.beta, delta=self.delta, gamma=self.gamma, sigma=self.sigma, isSavingEachIteration=self.isSavingEachIteration, withTumor=withTumor)
|
|
236
|
-
except Exception as e:
|
|
237
|
-
warnings.warn(f"An error occurred in CPU implementation: {e}")
|
|
238
|
-
result = None
|
|
239
|
-
|
|
240
|
-
return result
|
|
241
|
-
|
|
242
|
-
def _MAPEM(self, SMatrix, y, withTumor):
|
|
243
|
-
"""
|
|
244
|
-
This method implements the MAPEM algorithm using either CPU or single-GPU PyTorch acceleration.
|
|
245
|
-
Multi-GPU and Multi-CPU modes are not implemented for this algorithm.
|
|
246
|
-
"""
|
|
247
|
-
result = None
|
|
248
|
-
required_memory = calculate_memory_requirement(SMatrix, y)
|
|
249
|
-
|
|
250
|
-
if self.isGPU:
|
|
251
|
-
if check_gpu_memory(config.select_best_gpu(), required_memory):
|
|
252
|
-
try:
|
|
253
|
-
result = MAPEM._MAPEM_GPU(SMatrix=SMatrix, y=y, Omega=self.potentialFunction, numIterations=self.numIterations, beta=self.beta, delta=self.delta, gamma=self.gamma, sigma=self.sigma, isSavingEachIteration=self.isSavingEachIteration, withTumor=withTumor)
|
|
254
|
-
except Exception as e:
|
|
255
|
-
warnings.warn(f"Falling back to CPU implementation due to an error in GPU implementation: {e}")
|
|
256
|
-
else:
|
|
257
|
-
warnings.warn("Insufficient GPU memory for single GPU MAPEM. Falling back to CPU.")
|
|
258
|
-
|
|
259
|
-
if result is None:
|
|
260
|
-
try:
|
|
261
|
-
result = MAPEM._MAPEM_CPU(SMatrix=SMatrix, y=y, Omega=self.potentialFunction, numIterations=self.numIterations, beta=self.beta, delta=self.delta, gamma=self.gamma, sigma=self.sigma, isSavingEachIteration=self.isSavingEachIteration, withTumor=withTumor)
|
|
262
|
-
except Exception as e:
|
|
263
|
-
warnings.warn(f"An error occurred in CPU implementation: {e}")
|
|
264
|
-
result = None
|
|
265
|
-
|
|
266
|
-
return result
|
|
267
|
-
|
|
268
|
-
def _DEPIERRO(self, SMatrix, y, withTumor):
|
|
269
|
-
"""
|
|
270
|
-
This method implements the DEPIERRO algorithm using either CPU or single-GPU PyTorch acceleration.
|
|
271
|
-
Multi-GPU and Multi-CPU modes are not implemented for this algorithm.
|
|
272
|
-
"""
|
|
273
|
-
result = None
|
|
274
|
-
required_memory = calculate_memory_requirement(SMatrix, y)
|
|
275
|
-
|
|
276
|
-
if self.isGPU:
|
|
277
|
-
if check_gpu_memory(config.select_best_gpu(), required_memory):
|
|
278
|
-
try:
|
|
279
|
-
result = DEPIERRO._DEPIERRO_GPU(SMatrix=SMatrix, y=y, numIterations=self.numIterations, beta=self.beta, sigma=self.sigma, isSavingEachIteration=self.isSavingEachIteration, withTumor=withTumor)
|
|
280
|
-
except Exception as e:
|
|
281
|
-
warnings.warn(f"Falling back to CPU implementation due to an error in GPU implementation: {e}")
|
|
228
|
+
self.reconLaser, self.indices = DEPIERRO(SMatrix=self.SMatrix, y=self.experiment.AOsignal_withoutTumor, withTumor=withTumor, show_logs=show_logs)
|
|
282
229
|
else:
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
if result is None:
|
|
286
|
-
try:
|
|
287
|
-
result = DEPIERRO._DEPIERRO_CPU(SMatrix=SMatrix, y=y, numIterations=self.numIterations, beta=self.beta, sigma=self.sigma, isSavingEachIteration=self.isSavingEachIteration, withTumor=withTumor)
|
|
288
|
-
except Exception as e:
|
|
289
|
-
warnings.warn(f"An error occurred in CPU implementation: {e}")
|
|
290
|
-
result = None
|
|
291
|
-
|
|
292
|
-
return result
|
|
293
|
-
|
|
230
|
+
raise ValueError(f"Unknown optimizer type: {self.optimizer.value}")
|
|
@@ -49,12 +49,12 @@ class PrimalDualRecon(AlgebraicRecon):
|
|
|
49
49
|
)
|
|
50
50
|
os.makedirs(results_dir, exist_ok=True)
|
|
51
51
|
|
|
52
|
-
if os.path.exists(os.path.join(results_dir,"
|
|
52
|
+
if os.path.exists(os.path.join(results_dir,"indices.npy")):
|
|
53
53
|
return (True, results_dir)
|
|
54
54
|
|
|
55
55
|
return (False, results_dir)
|
|
56
56
|
|
|
57
|
-
def load(self, withTumor=True, results_date=None, optimizer=None, filePath=None):
|
|
57
|
+
def load(self, withTumor=True, results_date=None, optimizer=None, filePath=None, show_logs=True):
|
|
58
58
|
"""
|
|
59
59
|
Load the reconstruction results (reconPhantom or reconLaser) and indices as lists of 2D np arrays into self.
|
|
60
60
|
If the loaded file is a 3D array, it is split into a list of 2D arrays.
|
|
@@ -85,7 +85,7 @@ class PrimalDualRecon(AlgebraicRecon):
|
|
|
85
85
|
else:
|
|
86
86
|
self.reconLaser = data
|
|
87
87
|
# Essayer de charger les indices
|
|
88
|
-
base_dir,
|
|
88
|
+
base_dir, _ = os.path.split(recon_path)
|
|
89
89
|
indices_path = os.path.join(base_dir, "indices.npy")
|
|
90
90
|
if os.path.exists(indices_path):
|
|
91
91
|
indices_data = np.load(indices_path, allow_pickle=True)
|
|
@@ -95,7 +95,8 @@ class PrimalDualRecon(AlgebraicRecon):
|
|
|
95
95
|
self.indices = indices_data
|
|
96
96
|
else:
|
|
97
97
|
self.indices = None
|
|
98
|
-
|
|
98
|
+
if show_logs:
|
|
99
|
+
print(f"Loaded reconstruction results and indices from {recon_path}")
|
|
99
100
|
else:
|
|
100
101
|
# Mode chargement depuis le répertoire de résultats
|
|
101
102
|
if self.saveDir is None:
|
|
@@ -103,18 +104,19 @@ class PrimalDualRecon(AlgebraicRecon):
|
|
|
103
104
|
# Determine optimizer name for path matching
|
|
104
105
|
opt_name = optimizer.value if optimizer is not None else self.optimizer.value
|
|
105
106
|
# Find the most recent results directory if no date is specified
|
|
107
|
+
dir_pattern = f'results_*_{opt_name}'
|
|
108
|
+
if opt_name == OptimizerType.CP_TV.value or opt_name == OptimizerType.CP_KL.value:
|
|
109
|
+
dir_pattern += f'_Alpha_{self.alpha}_Theta_{self.theta}_L_{self.L}'
|
|
106
110
|
if results_date is None:
|
|
107
|
-
dirs = [
|
|
108
|
-
d for d in os.listdir(self.saveDir)
|
|
109
|
-
if os.path.isdir(os.path.join(self.saveDir, d))
|
|
110
|
-
and re.match(r'results_\d{4}_' + re.escape(opt_name) + r'($|_)', d)
|
|
111
|
-
]
|
|
111
|
+
dirs = [d for d in os.listdir(self.saveDir) if os.path.isdir(os.path.join(self.saveDir, d)) and dir_pattern in d]
|
|
112
112
|
if not dirs:
|
|
113
|
-
raise FileNotFoundError(f"No results directory found for
|
|
113
|
+
raise FileNotFoundError(f"No matching results directory found for pattern '{dir_pattern}' in {self.saveDir}.")
|
|
114
114
|
dirs.sort(reverse=True) # Most recent first
|
|
115
115
|
results_dir = os.path.join(self.saveDir, dirs[0])
|
|
116
116
|
else:
|
|
117
117
|
results_dir = os.path.join(self.saveDir, f'results_{results_date}_{opt_name}')
|
|
118
|
+
if opt_name == OptimizerType.CP_TV.value or opt_name == OptimizerType.CP_KL.value:
|
|
119
|
+
results_dir += f'_Alpha_{self.alpha}_Theta_{self.theta}_L_{self.L}'
|
|
118
120
|
if not os.path.exists(results_dir):
|
|
119
121
|
raise FileNotFoundError(f"Directory {results_dir} does not exist.")
|
|
120
122
|
# Load reconstruction results
|
|
@@ -144,16 +146,10 @@ class PrimalDualRecon(AlgebraicRecon):
|
|
|
144
146
|
self.indices = indices_data
|
|
145
147
|
else:
|
|
146
148
|
self.indices = None
|
|
147
|
-
|
|
148
|
-
|
|
149
|
+
if show_logs:
|
|
150
|
+
print(f"Loaded reconstruction results and indices from {results_dir}")
|
|
149
151
|
|
|
150
152
|
def _convexReconPython(self, withTumor):
|
|
151
|
-
if withTumor:
|
|
152
|
-
y=self.experiment.AOsignal_withTumor
|
|
153
|
-
|
|
154
|
-
else:
|
|
155
|
-
y=self.experiment.AOsignal_withoutTumor
|
|
156
|
-
|
|
157
153
|
if self.optimizer == OptimizerType.CP_TV:
|
|
158
154
|
if withTumor:
|
|
159
155
|
self.reconPhantom, self.indices = CP_TV(
|
|
@@ -359,3 +359,17 @@ class NoiseType(Enum):
|
|
|
359
359
|
"""Gaussian noise, typically used for transmission data."""
|
|
360
360
|
None_ = 'none'
|
|
361
361
|
"""No noise is applied."""
|
|
362
|
+
|
|
363
|
+
class SparsingType(Enum):
|
|
364
|
+
"""
|
|
365
|
+
Enum for different sparsing methods used in reconstructions.
|
|
366
|
+
|
|
367
|
+
Selection of sparsing methods:
|
|
368
|
+
- Thresholding: Sparsing based on a threshold value.
|
|
369
|
+
- TopK: Sparsing by retaining the top K values.
|
|
370
|
+
- None: No sparsing is applied.
|
|
371
|
+
"""
|
|
372
|
+
CSR = 'CSR'
|
|
373
|
+
"""Sparsing based on a threshold value."""
|
|
374
|
+
COO = 'COO'
|
|
375
|
+
"""Sparsing by retaining the top K values."""
|
|
@@ -159,11 +159,12 @@ def calculate_memory_requirement(SMatrix, y):
|
|
|
159
159
|
total_memory = (num_elements_SMatrix + num_elements_y + num_elements_theta) * 32 / 8 / 1024**3
|
|
160
160
|
return total_memory
|
|
161
161
|
|
|
162
|
-
def check_gpu_memory(device_index, required_memory):
|
|
162
|
+
def check_gpu_memory(device_index, required_memory, show_logs=True):
|
|
163
163
|
"""Check if enough memory is available on the specified GPU."""
|
|
164
|
-
free_memory,
|
|
164
|
+
free_memory, _ = torch.cuda.mem_get_info(f"cuda:{device_index}")
|
|
165
165
|
free_memory_gb = free_memory / 1024**3
|
|
166
|
-
|
|
166
|
+
if show_logs:
|
|
167
|
+
print(f"Free memory on GPU {device_index}: {free_memory_gb:.2f} GB, Required memory: {required_memory:.2f} GB")
|
|
167
168
|
return free_memory_gb >= required_memory
|
|
168
169
|
|
|
169
170
|
@njit(parallel=True)
|
|
@@ -31,7 +31,7 @@ class Recon(ABC):
|
|
|
31
31
|
def run(self,withTumor = True):
|
|
32
32
|
pass
|
|
33
33
|
|
|
34
|
-
def save(self, withTumor=True, overwrite=False, date=None):
|
|
34
|
+
def save(self, withTumor=True, overwrite=False, date=None, show_logs=True):
|
|
35
35
|
"""
|
|
36
36
|
Save the reconstruction results (reconPhantom is with tumor, reconLaser is without tumor) and indices of the saved recon results, in numpy format.
|
|
37
37
|
|
|
@@ -62,7 +62,8 @@ class Recon(ABC):
|
|
|
62
62
|
filepathIndices = os.path.join(filepath, "indices.npy")
|
|
63
63
|
np.save(filepathIndices, np.array(self.indices))
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
if show_logs:
|
|
66
|
+
print(f"Reconstruction results saved to {os.path.dirname(filepath)}")
|
|
66
67
|
|
|
67
68
|
@abstractmethod
|
|
68
69
|
def checkExistingFile(self, date = None):
|
AOT_biomaps/__init__.py
CHANGED
|
@@ -82,7 +82,7 @@ from .AOT_Recon.AOT_PotentialFunctions.RelativeDifferences import *
|
|
|
82
82
|
from .Config import config
|
|
83
83
|
from .Settings import *
|
|
84
84
|
|
|
85
|
-
__version__ = '2.9.
|
|
85
|
+
__version__ = '2.9.233'
|
|
86
86
|
__process__ = config.get_process()
|
|
87
87
|
|
|
88
88
|
def initialize(process=None):
|
|
@@ -229,6 +229,27 @@ def initialize(process=None):
|
|
|
229
229
|
|
|
230
230
|
|
|
231
231
|
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
|
|
232
253
|
|
|
233
254
|
|
|
234
255
|
|
|
@@ -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=mGXdd1sOEQC0Lvuyn1L1Gw7qSAxPsfWxrDcbUjgFwtg,4336
|
|
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
|
|
@@ -10,34 +10,34 @@ AOT_biomaps/AOT_Acoustic/StructuredWave.py,sha256=jTLVlOhYLWJb5MxZPxhq3OFVlz2Mco
|
|
|
10
10
|
AOT_biomaps/AOT_Acoustic/__init__.py,sha256=t9M2rRqa_L9pk7W2FeELTkHEMuP4DBr4gBRldMqsQbg,491
|
|
11
11
|
AOT_biomaps/AOT_Acoustic/_mainAcoustic.py,sha256=RdmhRF1i0KAlpsP7_wnZ7F4J27br3eUc4XR91Qq7C64,44158
|
|
12
12
|
AOT_biomaps/AOT_Experiment/Focus.py,sha256=B2nBawmv-NG2AWJx9zgQ8GlN6aFB9FwTSqX-M-phKXg,3193
|
|
13
|
-
AOT_biomaps/AOT_Experiment/Tomography.py,sha256=
|
|
13
|
+
AOT_biomaps/AOT_Experiment/Tomography.py,sha256=Ri83b4GMrxJO60qWsK9JInS9a7HU2Q8uqpjD3Xkl9OY,24488
|
|
14
14
|
AOT_biomaps/AOT_Experiment/__init__.py,sha256=H9zMLeBLA6uhbaHohAa-2u5mDDxqJi8oE5c6tShdQp8,308
|
|
15
|
-
AOT_biomaps/AOT_Experiment/_mainExperiment.py,sha256=
|
|
15
|
+
AOT_biomaps/AOT_Experiment/_mainExperiment.py,sha256=zSfuNrsz7nhiKrGIdK6CAXjlI2T6qYC5-JXHFgPNzhc,24674
|
|
16
16
|
AOT_biomaps/AOT_Optic/Absorber.py,sha256=jEodzRy7gkEH-wbazVasRQiri0dU16BfapmR-qnTSvM,867
|
|
17
17
|
AOT_biomaps/AOT_Optic/Laser.py,sha256=uzQwxswjU0kZWix3CmZLoWmhsBa3VhN27STprNv-xB8,2986
|
|
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/AlgebraicRecon.py,sha256=
|
|
21
|
+
AOT_biomaps/AOT_Recon/AlgebraicRecon.py,sha256=G3jET_uLMkaMuAKWeMZewU2lXPyPaXCHrehCRQfj2qs,49051
|
|
22
22
|
AOT_biomaps/AOT_Recon/AnalyticRecon.py,sha256=vjeTUnaZrtnLHnx6goseeJsd165KbSugQYwUXJFXapU,7596
|
|
23
|
-
AOT_biomaps/AOT_Recon/BayesianRecon.py,sha256=
|
|
23
|
+
AOT_biomaps/AOT_Recon/BayesianRecon.py,sha256=RnnPa-tTcvirwiNPnCRZnSM4NWeEEltYET-piBbp34g,12671
|
|
24
24
|
AOT_biomaps/AOT_Recon/DeepLearningRecon.py,sha256=RfVcEsi4GeGqJn0_SPxwQPQx6IQjin79WKh2UarMRLI,1383
|
|
25
|
-
AOT_biomaps/AOT_Recon/PrimalDualRecon.py,sha256
|
|
26
|
-
AOT_biomaps/AOT_Recon/ReconEnums.py,sha256=
|
|
27
|
-
AOT_biomaps/AOT_Recon/ReconTools.py,sha256=
|
|
25
|
+
AOT_biomaps/AOT_Recon/PrimalDualRecon.py,sha256=-7dqUxKXbHt7yR1I1kGcu1TOXn05ik6QoDDsuM0QvNU,10310
|
|
26
|
+
AOT_biomaps/AOT_Recon/ReconEnums.py,sha256=wKksIx_xGgGOq0DqFpMTjbnjbaneZhTKup2Z-3PhC5o,19077
|
|
27
|
+
AOT_biomaps/AOT_Recon/ReconTools.py,sha256=ApVZgztymdwuhbvoxdozo7oi3xyyZWxVuhKbzekuNBs,10636
|
|
28
28
|
AOT_biomaps/AOT_Recon/__init__.py,sha256=LDbNpsjS8_TJrXMKzkpzSAj5trVuCW57AWQaJBrzd0I,244
|
|
29
|
-
AOT_biomaps/AOT_Recon/_mainRecon.py,sha256=
|
|
30
|
-
AOT_biomaps/AOT_Recon/AOT_Optimizers/DEPIERRO.py,sha256=
|
|
31
|
-
AOT_biomaps/AOT_Recon/AOT_Optimizers/LS.py,sha256=
|
|
32
|
-
AOT_biomaps/AOT_Recon/AOT_Optimizers/MAPEM.py,sha256=
|
|
33
|
-
AOT_biomaps/AOT_Recon/AOT_Optimizers/MLEM.py,sha256=
|
|
29
|
+
AOT_biomaps/AOT_Recon/_mainRecon.py,sha256=6yMQxj3IzBaicZbQlMtPh37E00GT1088__PGNCNPc4k,13217
|
|
30
|
+
AOT_biomaps/AOT_Recon/AOT_Optimizers/DEPIERRO.py,sha256=qA1n722GLQJH3V8HcLr5q_GxEwBS_NRlIT3E6JZk-Ag,9479
|
|
31
|
+
AOT_biomaps/AOT_Recon/AOT_Optimizers/LS.py,sha256=N7v1xN9I-adIe3c20LN9Drc4-fBSLc9SEmJS8B3Zmag,4343
|
|
32
|
+
AOT_biomaps/AOT_Recon/AOT_Optimizers/MAPEM.py,sha256=vQLCB0L4FSXJKn2_6kdIdWrI6WZ82KuqUh7CSqBGVuo,25766
|
|
33
|
+
AOT_biomaps/AOT_Recon/AOT_Optimizers/MLEM.py,sha256=TFyL4UNWmHkEPyjfutc5j_CsBrph675rEOGkIEFc_T4,13788
|
|
34
34
|
AOT_biomaps/AOT_Recon/AOT_Optimizers/PDHG.py,sha256=5w4klYKAct9_gnlyocIiJfDrQUdz_VhXQVSpfjrjvNU,7927
|
|
35
35
|
AOT_biomaps/AOT_Recon/AOT_Optimizers/__init__.py,sha256=tNGVulINaqQZzcs5cvCMAT5ypGdoFWRnxtl9y7ePECk,106
|
|
36
36
|
AOT_biomaps/AOT_Recon/AOT_PotentialFunctions/Huber.py,sha256=dRd1t5OBag_gVmfji3L0QrA1GJ_702LcCkLH32Bot0M,3285
|
|
37
37
|
AOT_biomaps/AOT_Recon/AOT_PotentialFunctions/Quadratic.py,sha256=wTbzcXxMdEl9ReEXrL43DOJQecokBwJYU_s2kQUASZY,2545
|
|
38
|
-
AOT_biomaps/AOT_Recon/AOT_PotentialFunctions/RelativeDifferences.py,sha256=
|
|
38
|
+
AOT_biomaps/AOT_Recon/AOT_PotentialFunctions/RelativeDifferences.py,sha256=ZlWaKsNPCMfy4fWxYFT2pSoKMbysQkJH4N1WbbWncq4,2493
|
|
39
39
|
AOT_biomaps/AOT_Recon/AOT_PotentialFunctions/__init__.py,sha256=RwrJdLOFbAFBFnRxo5xdlOyeZgtQRDaRWDN9-uCGUiY,84
|
|
40
|
-
aot_biomaps-2.9.
|
|
41
|
-
aot_biomaps-2.9.
|
|
42
|
-
aot_biomaps-2.9.
|
|
43
|
-
aot_biomaps-2.9.
|
|
40
|
+
aot_biomaps-2.9.233.dist-info/METADATA,sha256=d5LWlR-zGNLI0gnyEC3Jbq_5b3KLPo5pn1trpc_LvWg,663
|
|
41
|
+
aot_biomaps-2.9.233.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
42
|
+
aot_biomaps-2.9.233.dist-info/top_level.txt,sha256=6STF-lT4kaAnBHJYCripmN5mZABoHjMuY689JdiDphk,12
|
|
43
|
+
aot_biomaps-2.9.233.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|