AOT-biomaps 2.9.221__tar.gz → 2.9.223__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.
Potentially problematic release.
This version of AOT-biomaps might be problematic. Click here for more details.
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Recon/AlgebraicRecon.py +97 -4
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Recon/BayesianRecon.py +1 -1
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Recon/PrimalDualRecon.py +7 -6
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/__init__.py +3 -1
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps.egg-info/PKG-INFO +1 -1
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/PKG-INFO +1 -1
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/setup.py +3 -1
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Acoustic/AcousticEnums.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Acoustic/AcousticTools.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Acoustic/FocusedWave.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Acoustic/IrregularWave.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Acoustic/PlaneWave.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Acoustic/StructuredWave.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Acoustic/__init__.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Acoustic/_mainAcoustic.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Experiment/Focus.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Experiment/Tomography.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Experiment/__init__.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Experiment/_mainExperiment.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Optic/Absorber.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Optic/Laser.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Optic/OpticEnums.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Optic/__init__.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Optic/_mainOptic.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Recon/AOT_Optimizers/DEPIERRO.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Recon/AOT_Optimizers/LS.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Recon/AOT_Optimizers/MAPEM.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Recon/AOT_Optimizers/MLEM.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Recon/AOT_Optimizers/PDHG.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Recon/AOT_Optimizers/__init__.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Recon/AOT_PotentialFunctions/Huber.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Recon/AOT_PotentialFunctions/Quadratic.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Recon/AOT_PotentialFunctions/RelativeDifferences.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Recon/AOT_PotentialFunctions/__init__.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Recon/AnalyticRecon.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Recon/DeepLearningRecon.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Recon/ReconEnums.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Recon/ReconTools.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Recon/__init__.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Recon/_mainRecon.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/Config.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/Settings.py +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps.egg-info/SOURCES.txt +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps.egg-info/dependency_links.txt +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps.egg-info/requires.txt +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps.egg-info/top_level.txt +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/README.md +0 -0
- {aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/setup.cfg +0 -0
|
@@ -676,7 +676,8 @@ class AlgebraicRecon(Recon):
|
|
|
676
676
|
|
|
677
677
|
return (False, results_dir)
|
|
678
678
|
|
|
679
|
-
|
|
679
|
+
|
|
680
|
+
def load(self, withTumor=True, results_date=None, optimizer=None, filePath=None):
|
|
680
681
|
"""
|
|
681
682
|
Load the reconstruction results (reconPhantom or reconLaser) and indices as lists of 2D np arrays into self.
|
|
682
683
|
If the loaded file is a 3D array, it is split into a list of 2D arrays.
|
|
@@ -686,9 +687,101 @@ class AlgebraicRecon(Recon):
|
|
|
686
687
|
optimizer: Optimizer name (as string or enum) to filter results. If None, uses the current optimizer of the instance.
|
|
687
688
|
filePath: Optional. If provided, loads directly from this path (overrides saveDir and results_date).
|
|
688
689
|
"""
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
690
|
+
if filePath is not None:
|
|
691
|
+
# Mode chargement direct depuis un fichier
|
|
692
|
+
recon_key = 'reconPhantom' if withTumor else 'reconLaser'
|
|
693
|
+
recon_path = filePath
|
|
694
|
+
if not os.path.exists(recon_path):
|
|
695
|
+
raise FileNotFoundError(f"No reconstruction file found at {recon_path}.")
|
|
696
|
+
# Charge le fichier (3D ou liste de 2D)
|
|
697
|
+
data = np.load(recon_path, allow_pickle=True)
|
|
698
|
+
# Découpe en liste de 2D si c'est un tableau 3D
|
|
699
|
+
if isinstance(data, np.ndarray) and data.ndim == 3:
|
|
700
|
+
if withTumor:
|
|
701
|
+
self.reconPhantom = [data[i, :, :] for i in range(data.shape[0])]
|
|
702
|
+
else:
|
|
703
|
+
self.reconLaser = [data[i, :, :] for i in range(data.shape[0])]
|
|
704
|
+
else:
|
|
705
|
+
# Sinon, suppose que c'est déjà une liste de 2D
|
|
706
|
+
if withTumor:
|
|
707
|
+
self.reconPhantom = data
|
|
708
|
+
else:
|
|
709
|
+
self.reconLaser = data
|
|
710
|
+
# Essayer de charger les indices
|
|
711
|
+
base_dir, _ = os.path.split(recon_path)
|
|
712
|
+
indices_path = os.path.join(base_dir, 'indices.npy')
|
|
713
|
+
if os.path.exists(indices_path):
|
|
714
|
+
indices_data = np.load(indices_path, allow_pickle=True)
|
|
715
|
+
if isinstance(indices_data, np.ndarray) and indices_data.ndim == 3:
|
|
716
|
+
self.indices = [indices_data[i, :, :] for i in range(indices_data.shape[0])]
|
|
717
|
+
else:
|
|
718
|
+
self.indices = indices_data
|
|
719
|
+
else:
|
|
720
|
+
self.indices = None
|
|
721
|
+
print(f"Loaded reconstruction results and indices from {recon_path}")
|
|
722
|
+
else:
|
|
723
|
+
# Mode chargement depuis le répertoire de résultats
|
|
724
|
+
if self.saveDir is None:
|
|
725
|
+
raise ValueError("Save directory is not specified. Please set saveDir before loading.")
|
|
726
|
+
# Use current optimizer and potential function if not provided
|
|
727
|
+
opt_name = optimizer.value if optimizer is not None else self.optimizer.value
|
|
728
|
+
# Build the base directory pattern
|
|
729
|
+
dir_pattern = f'results_*_{opt_name}'
|
|
730
|
+
# Add parameters to the pattern based on the optimizer
|
|
731
|
+
if optimizer is None:
|
|
732
|
+
optimizer = self.optimizer
|
|
733
|
+
if optimizer == OptimizerType.PPGMLEM:
|
|
734
|
+
beta_str = f'_Beta_{self.beta}'
|
|
735
|
+
delta_str = f'_Delta_{self.delta}'
|
|
736
|
+
gamma_str = f'_Gamma_{self.gamma}'
|
|
737
|
+
sigma_str = f'_Sigma_{self.sigma}'
|
|
738
|
+
dir_pattern += f'{beta_str}{delta_str}{gamma_str}{sigma_str}'
|
|
739
|
+
elif optimizer in (OptimizerType.PGC, OptimizerType.DEPIERRO95):
|
|
740
|
+
beta_str = f'_Beta_{self.beta}'
|
|
741
|
+
sigma_str = f'_Sigma_{self.sigma}'
|
|
742
|
+
dir_pattern += f'{beta_str}{sigma_str}'
|
|
743
|
+
# Find the most recent results directory if no date is specified
|
|
744
|
+
if results_date is None:
|
|
745
|
+
dirs = [d for d in os.listdir(self.saveDir) if os.path.isdir(os.path.join(self.saveDir, d)) and dir_pattern in d]
|
|
746
|
+
if not dirs:
|
|
747
|
+
raise FileNotFoundError(f"No matching results directory found for pattern '{dir_pattern}' in {self.saveDir}.")
|
|
748
|
+
dirs.sort(reverse=True) # Most recent first
|
|
749
|
+
results_dir = os.path.join(self.saveDir, dirs[0])
|
|
750
|
+
else:
|
|
751
|
+
results_dir = os.path.join(self.saveDir, f'results_{results_date}_{opt_name}')
|
|
752
|
+
if optimizer == OptimizerType.MLEM:
|
|
753
|
+
pass
|
|
754
|
+
elif optimizer == OptimizerType.LS:
|
|
755
|
+
results_dir += f'_Alpha_{self.alpha}'
|
|
756
|
+
if not os.path.exists(results_dir):
|
|
757
|
+
raise FileNotFoundError(f"Directory {results_dir} does not exist.")
|
|
758
|
+
# Load reconstruction results
|
|
759
|
+
recon_key = 'reconPhantom' if withTumor else 'reconLaser'
|
|
760
|
+
recon_path = os.path.join(results_dir, f'{recon_key}.npy')
|
|
761
|
+
if not os.path.exists(recon_path):
|
|
762
|
+
raise FileNotFoundError(f"No reconstruction file found at {recon_path}.")
|
|
763
|
+
data = np.load(recon_path, allow_pickle=True)
|
|
764
|
+
if isinstance(data, np.ndarray) and data.ndim == 3:
|
|
765
|
+
if withTumor:
|
|
766
|
+
self.reconPhantom = [data[i, :, :] for i in range(data.shape[0])]
|
|
767
|
+
else:
|
|
768
|
+
self.reconLaser = [data[i, :, :] for i in range(data.shape[0])]
|
|
769
|
+
else:
|
|
770
|
+
if withTumor:
|
|
771
|
+
self.reconPhantom = data
|
|
772
|
+
else:
|
|
773
|
+
self.reconLaser = data
|
|
774
|
+
# Load saved indices as list of 2D arrays
|
|
775
|
+
indices_path = os.path.join(results_dir, 'indices.npy')
|
|
776
|
+
if not os.path.exists(indices_path):
|
|
777
|
+
raise FileNotFoundError(f"No indices file found at {indices_path}.")
|
|
778
|
+
indices_data = np.load(indices_path, allow_pickle=True)
|
|
779
|
+
if isinstance(indices_data, np.ndarray) and indices_data.ndim == 3:
|
|
780
|
+
self.indices = [indices_data[i, :, :] for i in range(indices_data.shape[0])]
|
|
781
|
+
else:
|
|
782
|
+
self.indices = indices_data
|
|
783
|
+
print(f"Loaded reconstruction results and indices from {results_dir}")
|
|
784
|
+
|
|
692
785
|
|
|
693
786
|
def normalizeSMatrix(self):
|
|
694
787
|
self.SMatrix = self.SMatrix / (float(self.experiment.params.acoustic['voltage'])*float(self.experiment.params.acoustic['sensitivity']))
|
|
@@ -100,7 +100,7 @@ class BayesianRecon(AlgebraicRecon):
|
|
|
100
100
|
else:
|
|
101
101
|
self.reconLaser = data
|
|
102
102
|
# Essayer de charger les indices
|
|
103
|
-
base_dir,
|
|
103
|
+
base_dir, _ = os.path.split(recon_path)
|
|
104
104
|
indices_path = os.path.join(base_dir, 'indices.npy')
|
|
105
105
|
if os.path.exists(indices_path):
|
|
106
106
|
indices_data = np.load(indices_path, allow_pickle=True)
|
|
@@ -103,18 +103,19 @@ class PrimalDualRecon(AlgebraicRecon):
|
|
|
103
103
|
# Determine optimizer name for path matching
|
|
104
104
|
opt_name = optimizer.value if optimizer is not None else self.optimizer.value
|
|
105
105
|
# Find the most recent results directory if no date is specified
|
|
106
|
+
dir_pattern = f'results_*_{opt_name}'
|
|
107
|
+
if optimizer == OptimizerType.CP_TV or optimizer == OptimizerType.CP_KL:
|
|
108
|
+
dir_pattern += f'_Alpha_{self.alpha}_Theta_{self.theta}_L_{self.L}'
|
|
106
109
|
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
|
-
]
|
|
110
|
+
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
111
|
if not dirs:
|
|
113
|
-
raise FileNotFoundError(f"No results directory found for
|
|
112
|
+
raise FileNotFoundError(f"No matching results directory found for pattern '{dir_pattern}' in {self.saveDir}.")
|
|
114
113
|
dirs.sort(reverse=True) # Most recent first
|
|
115
114
|
results_dir = os.path.join(self.saveDir, dirs[0])
|
|
116
115
|
else:
|
|
117
116
|
results_dir = os.path.join(self.saveDir, f'results_{results_date}_{opt_name}')
|
|
117
|
+
if optimizer == OptimizerType.CP_TV or optimizer == OptimizerType.CP_KL:
|
|
118
|
+
results_dir += f'_Alpha_{self.alpha}_Theta_{self.theta}_L_{self.L}'
|
|
118
119
|
if not os.path.exists(results_dir):
|
|
119
120
|
raise FileNotFoundError(f"Directory {results_dir} does not exist.")
|
|
120
121
|
# Load reconstruction results
|
|
@@ -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.223'
|
|
86
86
|
__process__ = config.get_process()
|
|
87
87
|
|
|
88
88
|
def initialize(process=None):
|
|
@@ -255,6 +255,8 @@ def initialize(process=None):
|
|
|
255
255
|
|
|
256
256
|
|
|
257
257
|
|
|
258
|
+
|
|
259
|
+
|
|
258
260
|
|
|
259
261
|
|
|
260
262
|
|
|
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
|
|
|
2
2
|
|
|
3
3
|
setup(
|
|
4
4
|
name='AOT_biomaps',
|
|
5
|
-
version='2.9.
|
|
5
|
+
version='2.9.223',
|
|
6
6
|
packages=find_packages(),
|
|
7
7
|
include_package_data=True,
|
|
8
8
|
install_requires=[
|
|
@@ -230,6 +230,8 @@ setup(
|
|
|
230
230
|
|
|
231
231
|
|
|
232
232
|
|
|
233
|
+
|
|
234
|
+
|
|
233
235
|
|
|
234
236
|
|
|
235
237
|
|
|
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
|
{aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Recon/AOT_Optimizers/DEPIERRO.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Recon/AOT_Optimizers/__init__.py
RENAMED
|
File without changes
|
{aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Recon/AOT_PotentialFunctions/Huber.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{aot_biomaps-2.9.221 → aot_biomaps-2.9.223}/AOT_biomaps/AOT_Recon/AOT_PotentialFunctions/__init__.py
RENAMED
|
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
|