AOT-biomaps 2.9.138__py3-none-any.whl → 2.9.279__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_Acoustic/AcousticTools.py +35 -115
- AOT_biomaps/AOT_Acoustic/StructuredWave.py +2 -2
- AOT_biomaps/AOT_Acoustic/_mainAcoustic.py +22 -18
- AOT_biomaps/AOT_Experiment/Tomography.py +74 -4
- AOT_biomaps/AOT_Experiment/_mainExperiment.py +102 -68
- AOT_biomaps/AOT_Optic/_mainOptic.py +124 -58
- AOT_biomaps/AOT_Recon/AOT_Optimizers/DEPIERRO.py +72 -108
- AOT_biomaps/AOT_Recon/AOT_Optimizers/LS.py +474 -289
- AOT_biomaps/AOT_Recon/AOT_Optimizers/MAPEM.py +173 -68
- AOT_biomaps/AOT_Recon/AOT_Optimizers/MLEM.py +360 -154
- AOT_biomaps/AOT_Recon/AOT_Optimizers/PDHG.py +150 -111
- AOT_biomaps/AOT_Recon/AOT_PotentialFunctions/RelativeDifferences.py +10 -14
- AOT_biomaps/AOT_Recon/AOT_SparseSMatrix/SparseSMatrix_CSR.py +281 -0
- AOT_biomaps/AOT_Recon/AOT_SparseSMatrix/SparseSMatrix_SELL.py +328 -0
- AOT_biomaps/AOT_Recon/AOT_SparseSMatrix/__init__.py +2 -0
- AOT_biomaps/AOT_Recon/AOT_biomaps_kernels.cubin +0 -0
- AOT_biomaps/AOT_Recon/AlgebraicRecon.py +359 -238
- AOT_biomaps/AOT_Recon/AnalyticRecon.py +29 -41
- AOT_biomaps/AOT_Recon/BayesianRecon.py +165 -91
- AOT_biomaps/AOT_Recon/DeepLearningRecon.py +4 -1
- AOT_biomaps/AOT_Recon/PrimalDualRecon.py +175 -31
- AOT_biomaps/AOT_Recon/ReconEnums.py +38 -3
- AOT_biomaps/AOT_Recon/ReconTools.py +184 -77
- AOT_biomaps/AOT_Recon/__init__.py +1 -0
- AOT_biomaps/AOT_Recon/_mainRecon.py +144 -74
- AOT_biomaps/__init__.py +4 -36
- {aot_biomaps-2.9.138.dist-info → aot_biomaps-2.9.279.dist-info}/METADATA +2 -1
- aot_biomaps-2.9.279.dist-info/RECORD +47 -0
- aot_biomaps-2.9.138.dist-info/RECORD +0 -43
- {aot_biomaps-2.9.138.dist-info → aot_biomaps-2.9.279.dist-info}/WHEEL +0 -0
- {aot_biomaps-2.9.138.dist-info → aot_biomaps-2.9.279.dist-info}/top_level.txt +0 -0
|
@@ -10,7 +10,7 @@ from abc import ABC, abstractmethod
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
class Recon(ABC):
|
|
13
|
-
def __init__(self, experiment, saveDir = None, isGPU = config.get_process() == 'gpu',
|
|
13
|
+
def __init__(self, experiment, saveDir = None, isGPU = config.get_process() == 'gpu', isMultiCPU = True):
|
|
14
14
|
self.reconPhantom = None
|
|
15
15
|
self.reconLaser = None
|
|
16
16
|
self.experiment = experiment
|
|
@@ -18,9 +18,9 @@ class Recon(ABC):
|
|
|
18
18
|
self.saveDir = saveDir
|
|
19
19
|
self.MSE = None
|
|
20
20
|
self.SSIM = None
|
|
21
|
+
self.CRC = None
|
|
21
22
|
|
|
22
23
|
self.isGPU = isGPU
|
|
23
|
-
self.isMultiGPU = isMultiGPU
|
|
24
24
|
self.isMultiCPU = isMultiCPU
|
|
25
25
|
|
|
26
26
|
if str(type(self.experiment)) != str(Tomography):
|
|
@@ -30,38 +30,101 @@ class Recon(ABC):
|
|
|
30
30
|
def run(self,withTumor = True):
|
|
31
31
|
pass
|
|
32
32
|
|
|
33
|
-
def
|
|
33
|
+
def save(self, withTumor=True, overwrite=False, date=None, show_logs=True):
|
|
34
34
|
"""
|
|
35
|
-
|
|
35
|
+
Save the reconstruction results (reconPhantom is with tumor, reconLaser is without tumor) and indices of the saved recon results, in numpy format.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
withTumor (bool): If True, saves reconPhantom. If False, saves reconLaser. Default is True.
|
|
39
|
+
overwrite (bool): If False, does not save if the file already exists. Default is False.
|
|
40
|
+
|
|
41
|
+
Warnings:
|
|
42
|
+
reconPhantom and reconLaser are lists of 2D numpy arrays, each array corresponding to one iteration.
|
|
36
43
|
"""
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
raise ValueError("Run reconstruction first")
|
|
44
|
+
isExisting, filepath = self.checkExistingFile(date=date)
|
|
45
|
+
if isExisting and not overwrite:
|
|
46
|
+
return
|
|
41
47
|
|
|
48
|
+
filename = 'reconPhantom.npy' if withTumor else 'reconLaser.npy'
|
|
49
|
+
filepathRecon = os.path.join(filepath, filename)
|
|
50
|
+
|
|
51
|
+
if withTumor:
|
|
52
|
+
if not self.reconPhantom or len(self.reconPhantom) == 0:
|
|
53
|
+
raise ValueError("Reconstructed phantom is empty. Run reconstruction first.")
|
|
54
|
+
np.save(filepathRecon, np.array(self.reconPhantom))
|
|
55
|
+
else:
|
|
56
|
+
if not self.reconLaser or len(self.reconLaser) == 0:
|
|
57
|
+
raise ValueError("Reconstructed laser is empty. Run reconstruction first.")
|
|
58
|
+
np.save(filepathRecon, np.array(self.reconLaser))
|
|
59
|
+
|
|
60
|
+
if self.indices is not None and len(self.indices) > 0:
|
|
61
|
+
filepathIndices = os.path.join(filepath, "indices.npy")
|
|
62
|
+
np.save(filepathIndices, np.array(self.indices))
|
|
63
|
+
|
|
64
|
+
if show_logs:
|
|
65
|
+
print(f"Reconstruction results saved to {os.path.dirname(filepath)}")
|
|
66
|
+
|
|
67
|
+
@abstractmethod
|
|
68
|
+
def checkExistingFile(self, date = None):
|
|
69
|
+
pass
|
|
70
|
+
|
|
71
|
+
def calculateCRC(self, use_ROI=True):
|
|
72
|
+
"""
|
|
73
|
+
Computes the Contrast Recovery Coefficient (CRC) for all ROIs combined or globally.
|
|
74
|
+
For analytic reconstruction: returns a single CRC value.
|
|
75
|
+
For iterative reconstruction: returns a list of CRC values (one per iteration).
|
|
76
|
+
If iteration is specified, returns CRC for that specific iteration only.
|
|
77
|
+
|
|
78
|
+
:param iteration: Specific iteration index (optional). If None, computes for all iterations.
|
|
79
|
+
:param use_ROI: If True, computes CRC for all ROIs combined. If False, computes global CRC.
|
|
80
|
+
:return: CRC value or list of CRC values.
|
|
81
|
+
"""
|
|
82
|
+
if self.reconType is None:
|
|
83
|
+
raise ValueError("Run reconstruction first")
|
|
84
|
+
|
|
42
85
|
if self.reconLaser is None or self.reconLaser == []:
|
|
43
86
|
raise ValueError("Reconstructed laser is empty. Run reconstruction first.")
|
|
44
|
-
if isinstance(self.Laser,list) and len(self.Laser) == 1:
|
|
45
|
-
raise ValueError("Reconstructed Image without tumor is a single frame. Run reconstruction with isSavingEachIteration=True to get a sequence of frames.")
|
|
46
87
|
if self.reconPhantom is None or self.reconPhantom == []:
|
|
47
88
|
raise ValueError("Reconstructed phantom is empty. Run reconstruction first.")
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
89
|
+
|
|
90
|
+
# Handle empty reconstructions
|
|
51
91
|
if self.reconLaser is None or self.reconLaser == []:
|
|
52
92
|
print("Reconstructed laser is empty. Running reconstruction without tumor...")
|
|
53
|
-
self.run(withTumor
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
93
|
+
self.run(withTumor=False, isSavingEachIteration=True)
|
|
94
|
+
|
|
95
|
+
# Get the ROI mask(s) from the phantom if needed
|
|
96
|
+
if use_ROI:
|
|
97
|
+
self.experiment.OpticImage.find_ROI()
|
|
98
|
+
global_mask = np.logical_or.reduce(self.experiment.OpticImage.maskList)
|
|
99
|
+
|
|
100
|
+
# Analytic reconstruction case
|
|
101
|
+
if self.reconType is ReconType.Analytic:
|
|
102
|
+
if use_ROI:
|
|
103
|
+
recon_ratio = np.mean(self.reconPhantom[global_mask]) / np.mean(self.reconLaser[global_mask])
|
|
104
|
+
lambda_ratio = np.mean(self.experiment.OpticImage.phantom[global_mask]) / np.mean(self.experiment.OpticImage.laser.intensity[global_mask])
|
|
105
|
+
else:
|
|
106
|
+
recon_ratio = np.mean(self.reconPhantom) / np.mean(self.reconLaser)
|
|
107
|
+
lambda_ratio = np.mean(self.experiment.OpticImage.phantom) / np.mean(self.experiment.OpticImage.laser.intensity)
|
|
108
|
+
|
|
109
|
+
self.CRC =(recon_ratio - 1) / (lambda_ratio - 1)
|
|
110
|
+
|
|
111
|
+
# Iterative reconstruction case
|
|
57
112
|
else:
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
113
|
+
iterations = range(len(self.reconPhantom))
|
|
114
|
+
|
|
115
|
+
crc_list = []
|
|
116
|
+
for it in iterations:
|
|
117
|
+
if use_ROI:
|
|
118
|
+
recon_ratio = np.mean(self.reconPhantom[it][global_mask]) / np.mean(self.reconLaser[it][global_mask])
|
|
119
|
+
lambda_ratio = np.mean(self.experiment.OpticImage.phantom[global_mask]) / np.mean(self.experiment.OpticImage.laser.intensity[global_mask])
|
|
120
|
+
else:
|
|
121
|
+
recon_ratio = np.mean(self.reconPhantom[it]) / np.mean(self.reconLaser[it])
|
|
122
|
+
lambda_ratio = np.mean(self.experiment.OpticImage.phantom) / np.mean(self.experiment.OpticImage.laser.intensity)
|
|
123
|
+
|
|
124
|
+
crc_list.append((recon_ratio - 1) / (lambda_ratio - 1))
|
|
125
|
+
|
|
126
|
+
self.CRC = crc_list
|
|
127
|
+
|
|
65
128
|
def calculateMSE(self):
|
|
66
129
|
"""
|
|
67
130
|
Calculate the Mean Squared Error (MSE) of the reconstruction.
|
|
@@ -76,7 +139,7 @@ class Recon(ABC):
|
|
|
76
139
|
if self.reconType in (ReconType.Analytic, ReconType.DeepLearning):
|
|
77
140
|
self.MSE = mse(self.experiment.OpticImage.phantom, self.reconPhantom)
|
|
78
141
|
|
|
79
|
-
elif self.reconType in (ReconType.Algebraic, ReconType.Bayesian):
|
|
142
|
+
elif self.reconType in (ReconType.Algebraic, ReconType.Bayesian, ReconType.Convex):
|
|
80
143
|
self.MSE = []
|
|
81
144
|
for theta in self.reconPhantom:
|
|
82
145
|
self.MSE.append(mse(self.experiment.OpticImage.phantom, theta))
|
|
@@ -102,10 +165,9 @@ class Recon(ABC):
|
|
|
102
165
|
data_range = theta.max() - theta.min()
|
|
103
166
|
ssim_value = ssim(self.experiment.OpticImage.phantom, theta, data_range=data_range)
|
|
104
167
|
self.SSIM.append(ssim_value)
|
|
105
|
-
|
|
106
|
-
def show(self, withTumor=True, savePath=None):
|
|
107
|
-
fig, axs = plt.subplots(1, 2, figsize=(20, 10))
|
|
168
|
+
|
|
108
169
|
|
|
170
|
+
def show(self, withTumor=True, savePath=None):
|
|
109
171
|
if withTumor:
|
|
110
172
|
if self.reconPhantom is None or self.reconPhantom == []:
|
|
111
173
|
raise ValueError("Reconstructed phantom with tumor is empty. Run reconstruction first.")
|
|
@@ -113,9 +175,31 @@ class Recon(ABC):
|
|
|
113
175
|
image = self.reconPhantom[-1]
|
|
114
176
|
else:
|
|
115
177
|
image = self.reconPhantom
|
|
116
|
-
|
|
178
|
+
if self.experiment.OpticImage is None:
|
|
179
|
+
fig, axs = plt.subplots(1, 1, figsize=(10, 10))
|
|
180
|
+
else:
|
|
181
|
+
fig, axs = plt.subplots(1, 2, figsize=(20, 10))
|
|
182
|
+
# Phantom original
|
|
183
|
+
im1 = axs[1].imshow(
|
|
184
|
+
self.experiment.OpticImage.phantom,
|
|
185
|
+
cmap='hot',
|
|
186
|
+
vmin=0,
|
|
187
|
+
vmax=1,
|
|
188
|
+
extent=(
|
|
189
|
+
self.experiment.params.general['Xrange'][0],
|
|
190
|
+
self.experiment.params.general['Xrange'][1],
|
|
191
|
+
self.experiment.params.general['Zrange'][1],
|
|
192
|
+
self.experiment.params.general['Zrange'][0]
|
|
193
|
+
),
|
|
194
|
+
aspect='equal'
|
|
195
|
+
)
|
|
196
|
+
axs[1].set_title("Phantom with tumor")
|
|
197
|
+
axs[1].set_xlabel("x (mm)", fontsize=12)
|
|
198
|
+
axs[1].set_ylabel("z (mm)", fontsize=12)
|
|
199
|
+
axs[1].tick_params(axis='both', which='major', labelsize=8)
|
|
200
|
+
# Phantom reconstruit
|
|
117
201
|
im0 = axs[0].imshow(
|
|
118
|
-
|
|
202
|
+
image,
|
|
119
203
|
cmap='hot',
|
|
120
204
|
vmin=0,
|
|
121
205
|
vmax=1,
|
|
@@ -127,29 +211,11 @@ class Recon(ABC):
|
|
|
127
211
|
),
|
|
128
212
|
aspect='equal'
|
|
129
213
|
)
|
|
130
|
-
axs[0].set_title("
|
|
214
|
+
axs[0].set_title("Reconstructed phantom with tumor")
|
|
131
215
|
axs[0].set_xlabel("x (mm)", fontsize=12)
|
|
132
216
|
axs[0].set_ylabel("z (mm)", fontsize=12)
|
|
133
217
|
axs[0].tick_params(axis='both', which='major', labelsize=8)
|
|
134
|
-
|
|
135
|
-
im1 = axs[1].imshow(
|
|
136
|
-
image,
|
|
137
|
-
cmap='hot',
|
|
138
|
-
vmin=0,
|
|
139
|
-
vmax=1,
|
|
140
|
-
extent=(
|
|
141
|
-
self.experiment.params.general['Xrange'][0],
|
|
142
|
-
self.experiment.params.general['Xrange'][1],
|
|
143
|
-
self.experiment.params.general['Zrange'][1],
|
|
144
|
-
self.experiment.params.general['Zrange'][0]
|
|
145
|
-
),
|
|
146
|
-
aspect='equal'
|
|
147
|
-
)
|
|
148
|
-
axs[1].set_title("Reconstructed phantom with tumor")
|
|
149
|
-
axs[1].set_xlabel("x (mm)", fontsize=12)
|
|
150
|
-
axs[1].set_ylabel("z (mm)", fontsize=12)
|
|
151
|
-
axs[1].tick_params(axis='both', which='major', labelsize=8)
|
|
152
|
-
axs[1].tick_params(axis='y', which='both', left=False, right=False, labelleft=False)
|
|
218
|
+
axs[0].tick_params(axis='y', which='both', left=False, right=False, labelleft=False)
|
|
153
219
|
else:
|
|
154
220
|
if self.reconLaser is None or self.reconLaser == []:
|
|
155
221
|
raise ValueError("Reconstructed laser without tumor is empty. Run reconstruction first.")
|
|
@@ -157,9 +223,31 @@ class Recon(ABC):
|
|
|
157
223
|
image = self.reconLaser[-1]
|
|
158
224
|
else:
|
|
159
225
|
image = self.reconLaser
|
|
160
|
-
|
|
226
|
+
if self.experiment.OpticImage is None:
|
|
227
|
+
fig, axs = plt.subplots(1, 1, figsize=(10, 10))
|
|
228
|
+
else:
|
|
229
|
+
fig, axs = plt.subplots(1, 2, figsize=(20, 10))
|
|
230
|
+
# Laser original
|
|
231
|
+
im1 = axs[1].imshow(
|
|
232
|
+
self.experiment.OpticImage.laser.intensity,
|
|
233
|
+
cmap='hot',
|
|
234
|
+
vmin=0,
|
|
235
|
+
vmax=np.max(self.experiment.OpticImage.laser.intensity),
|
|
236
|
+
extent=(
|
|
237
|
+
self.experiment.params.general['Xrange'][0],
|
|
238
|
+
self.experiment.params.general['Xrange'][1],
|
|
239
|
+
self.experiment.params.general['Zrange'][1],
|
|
240
|
+
self.experiment.params.general['Zrange'][0]
|
|
241
|
+
),
|
|
242
|
+
aspect='equal'
|
|
243
|
+
)
|
|
244
|
+
axs[1].set_title("Laser without tumor")
|
|
245
|
+
axs[1].set_xlabel("x (mm)", fontsize=12)
|
|
246
|
+
axs[1].set_ylabel("z (mm)", fontsize=12)
|
|
247
|
+
axs[1].tick_params(axis='both', which='major', labelsize=8)
|
|
248
|
+
# Laser reconstruit
|
|
161
249
|
im0 = axs[0].imshow(
|
|
162
|
-
|
|
250
|
+
image,
|
|
163
251
|
cmap='hot',
|
|
164
252
|
vmin=0,
|
|
165
253
|
vmax=np.max(self.experiment.OpticImage.laser.intensity),
|
|
@@ -169,36 +257,18 @@ class Recon(ABC):
|
|
|
169
257
|
self.experiment.params.general['Zrange'][1],
|
|
170
258
|
self.experiment.params.general['Zrange'][0]
|
|
171
259
|
),
|
|
172
|
-
aspect='equal'
|
|
260
|
+
aspect='equal'
|
|
173
261
|
)
|
|
174
|
-
axs[0].set_title("
|
|
262
|
+
axs[0].set_title("Reconstructed laser without tumor")
|
|
175
263
|
axs[0].set_xlabel("x (mm)", fontsize=12)
|
|
176
264
|
axs[0].set_ylabel("z (mm)", fontsize=12)
|
|
177
265
|
axs[0].tick_params(axis='both', which='major', labelsize=8)
|
|
178
|
-
|
|
179
|
-
im1 = axs[1].imshow(
|
|
180
|
-
image,
|
|
181
|
-
cmap='hot',
|
|
182
|
-
vmin=0,
|
|
183
|
-
vmax=np.max(self.experiment.OpticImage.laser.intensity),
|
|
184
|
-
extent=(
|
|
185
|
-
self.experiment.params.general['Xrange'][0],
|
|
186
|
-
self.experiment.params.general['Xrange'][1],
|
|
187
|
-
self.experiment.params.general['Zrange'][1],
|
|
188
|
-
self.experiment.params.general['Zrange'][0]
|
|
189
|
-
),
|
|
190
|
-
aspect='equal'
|
|
191
|
-
)
|
|
192
|
-
axs[1].set_title("Reconstructed laser without tumor")
|
|
193
|
-
axs[1].set_xlabel("x (mm)", fontsize=12)
|
|
194
|
-
axs[1].set_ylabel("z (mm)", fontsize=12)
|
|
195
|
-
axs[1].tick_params(axis='both', which='major', labelsize=8)
|
|
196
|
-
axs[1].tick_params(axis='y', which='both', left=False, right=False, labelleft=False)
|
|
266
|
+
axs[0].tick_params(axis='y', which='both', left=False, right=False, labelleft=False)
|
|
197
267
|
|
|
198
268
|
# Colorbar commune
|
|
199
269
|
fig.subplots_adjust(bottom=0.2)
|
|
200
270
|
cbar_ax = fig.add_axes([0.25, 0.08, 0.5, 0.03])
|
|
201
|
-
cbar = fig.colorbar(
|
|
271
|
+
cbar = fig.colorbar(im0, cax=cbar_ax, orientation='horizontal')
|
|
202
272
|
cbar.set_label('Normalized Intensity', fontsize=12)
|
|
203
273
|
cbar.ax.tick_params(labelsize=8)
|
|
204
274
|
|
AOT_biomaps/__init__.py
CHANGED
|
@@ -74,6 +74,9 @@ from .AOT_Recon.AOT_Optimizers.DEPIERRO import *
|
|
|
74
74
|
from .AOT_Recon.AOT_Optimizers.MAPEM import *
|
|
75
75
|
from .AOT_Recon.AOT_Optimizers.MLEM import *
|
|
76
76
|
from .AOT_Recon.AOT_Optimizers.PDHG import *
|
|
77
|
+
# SPARSE S-MATRIX
|
|
78
|
+
from .AOT_Recon.AOT_SparseSMatrix.SparseSMatrix_CSR import *
|
|
79
|
+
from .AOT_Recon.AOT_SparseSMatrix.SparseSMatrix_SELL import *
|
|
77
80
|
# POTENTIAL FUNCTIONS
|
|
78
81
|
from .AOT_Recon.AOT_PotentialFunctions.Huber import *
|
|
79
82
|
from .AOT_Recon.AOT_PotentialFunctions.Quadratic import *
|
|
@@ -82,7 +85,7 @@ from .AOT_Recon.AOT_PotentialFunctions.RelativeDifferences import *
|
|
|
82
85
|
from .Config import config
|
|
83
86
|
from .Settings import *
|
|
84
87
|
|
|
85
|
-
__version__ = '2.9.
|
|
88
|
+
__version__ = '2.9.279'
|
|
86
89
|
__process__ = config.get_process()
|
|
87
90
|
|
|
88
91
|
def initialize(process=None):
|
|
@@ -132,41 +135,6 @@ def initialize(process=None):
|
|
|
132
135
|
|
|
133
136
|
|
|
134
137
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
138
|
|
|
171
139
|
|
|
172
140
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: AOT_biomaps
|
|
3
|
-
Version: 2.9.
|
|
3
|
+
Version: 2.9.279
|
|
4
4
|
Summary: Acousto-Optic Tomography
|
|
5
5
|
Home-page: https://github.com/LucasDuclos/AcoustoOpticTomography
|
|
6
6
|
Author: Lucas Duclos
|
|
@@ -15,6 +15,7 @@ Requires-Dist: nvidia-ml-py3==7.352.0
|
|
|
15
15
|
Requires-Dist: numpy==1.26.4
|
|
16
16
|
Requires-Dist: torch==2.7.0
|
|
17
17
|
Requires-Dist: scipy==1.13.1
|
|
18
|
+
Requires-Dist: cupy-cuda12x==13.6.0
|
|
18
19
|
Dynamic: author
|
|
19
20
|
Dynamic: author-email
|
|
20
21
|
Dynamic: home-page
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
AOT_biomaps/Config.py,sha256=ghEOP1n8aO1pR-su13wMeAZAxZRfry5hH67NbtZ8SqI,3614
|
|
2
|
+
AOT_biomaps/Settings.py,sha256=v8fPhnvvcfBJP29m1RLOTEr3jndGLGwbUiORXmsj2Bo,2853
|
|
3
|
+
AOT_biomaps/__init__.py,sha256=RfEi98jeLI6dtUnjRISgt1myI41kJwTXMkpSpf2VkH4,4220
|
|
4
|
+
AOT_biomaps/AOT_Acoustic/AcousticEnums.py,sha256=s5kXa6jKzbS4btwbubrVcynLOr0yg5tth5vL_FGfbMk,1802
|
|
5
|
+
AOT_biomaps/AOT_Acoustic/AcousticTools.py,sha256=al7xXKMY5e-qQQ7nrQVPVAmqYiB320OluNlY6ti8iKc,7539
|
|
6
|
+
AOT_biomaps/AOT_Acoustic/FocusedWave.py,sha256=3kGKKDx_3Msy5COYqIwzROPORGWvNjw8UsDanBfkMXE,11037
|
|
7
|
+
AOT_biomaps/AOT_Acoustic/IrregularWave.py,sha256=yZhtxkR6zlciRcEpdTR0BAhvgQl40XHKFaF8f4VXarE,3035
|
|
8
|
+
AOT_biomaps/AOT_Acoustic/PlaneWave.py,sha256=xza-rj5AUWDecLkGDxRcULrwZVWeBvGnEP2d51TyR04,1447
|
|
9
|
+
AOT_biomaps/AOT_Acoustic/StructuredWave.py,sha256=jTLVlOhYLWJb5MxZPxhq3OFVlz2McoyMPBmfLvnekDU,18209
|
|
10
|
+
AOT_biomaps/AOT_Acoustic/__init__.py,sha256=t9M2rRqa_L9pk7W2FeELTkHEMuP4DBr4gBRldMqsQbg,491
|
|
11
|
+
AOT_biomaps/AOT_Acoustic/_mainAcoustic.py,sha256=RdmhRF1i0KAlpsP7_wnZ7F4J27br3eUc4XR91Qq7C64,44158
|
|
12
|
+
AOT_biomaps/AOT_Experiment/Focus.py,sha256=B2nBawmv-NG2AWJx9zgQ8GlN6aFB9FwTSqX-M-phKXg,3193
|
|
13
|
+
AOT_biomaps/AOT_Experiment/Tomography.py,sha256=Ri83b4GMrxJO60qWsK9JInS9a7HU2Q8uqpjD3Xkl9OY,24488
|
|
14
|
+
AOT_biomaps/AOT_Experiment/__init__.py,sha256=H9zMLeBLA6uhbaHohAa-2u5mDDxqJi8oE5c6tShdQp8,308
|
|
15
|
+
AOT_biomaps/AOT_Experiment/_mainExperiment.py,sha256=zSfuNrsz7nhiKrGIdK6CAXjlI2T6qYC5-JXHFgPNzhc,24674
|
|
16
|
+
AOT_biomaps/AOT_Optic/Absorber.py,sha256=jEodzRy7gkEH-wbazVasRQiri0dU16BfapmR-qnTSvM,867
|
|
17
|
+
AOT_biomaps/AOT_Optic/Laser.py,sha256=uzQwxswjU0kZWix3CmZLoWmhsBa3VhN27STprNv-xB8,2986
|
|
18
|
+
AOT_biomaps/AOT_Optic/OpticEnums.py,sha256=b349_JyjHqQohmjK4Wke-A_HLGaqb3_BKbyUqFC4jxY,499
|
|
19
|
+
AOT_biomaps/AOT_Optic/__init__.py,sha256=HSUVhfz0NzwHHZZ9KP9Xyfu33IgP_rYJX86J-gEROlo,321
|
|
20
|
+
AOT_biomaps/AOT_Optic/_mainOptic.py,sha256=Wk63CcgWbU-ygMfjNK80islaUbGGJpTXgZY3_C2KQNY,8179
|
|
21
|
+
AOT_biomaps/AOT_Recon/AOT_biomaps_kernels.cubin,sha256=iIp_WxETL4_BCJ0zErD4xm_Kpeey3ymjafdg9kmLd-s,82528
|
|
22
|
+
AOT_biomaps/AOT_Recon/AlgebraicRecon.py,sha256=ZroHGhk6Yod4_6yNSlcB5Ew5XLAGO8Bc0dW_xCVJaig,47184
|
|
23
|
+
AOT_biomaps/AOT_Recon/AnalyticRecon.py,sha256=RaQ5AJ1HUmSct0BgjZ0GWSJg7SALCn3Q0laqj1yyhAE,7123
|
|
24
|
+
AOT_biomaps/AOT_Recon/BayesianRecon.py,sha256=RnnPa-tTcvirwiNPnCRZnSM4NWeEEltYET-piBbp34g,12671
|
|
25
|
+
AOT_biomaps/AOT_Recon/DeepLearningRecon.py,sha256=RfVcEsi4GeGqJn0_SPxwQPQx6IQjin79WKh2UarMRLI,1383
|
|
26
|
+
AOT_biomaps/AOT_Recon/PrimalDualRecon.py,sha256=-7dqUxKXbHt7yR1I1kGcu1TOXn05ik6QoDDsuM0QvNU,10310
|
|
27
|
+
AOT_biomaps/AOT_Recon/ReconEnums.py,sha256=KAf55RqHAr2ilt6pxFrUBGQOn-7HA8NP6TyL-1FNiXo,19714
|
|
28
|
+
AOT_biomaps/AOT_Recon/ReconTools.py,sha256=RQbtK6aR0fIfIQ4wSRPIro8LEvjFG4uVCYwYSepxp44,16302
|
|
29
|
+
AOT_biomaps/AOT_Recon/__init__.py,sha256=xs_argJqXKFl76xP7-jiUc1ynOEEtY7XZ0gDxD5uVZc,246
|
|
30
|
+
AOT_biomaps/AOT_Recon/_mainRecon.py,sha256=exoa2UBMfMHjemxAU9dW0mhEfsP6Oe1qjSfrTrgbIcY,13125
|
|
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=SvUXNnavusUFuJSPZ-Au4BQZaV2z_aRyx6w5-TpRJ9E,22719
|
|
33
|
+
AOT_biomaps/AOT_Recon/AOT_Optimizers/MAPEM.py,sha256=vQLCB0L4FSXJKn2_6kdIdWrI6WZ82KuqUh7CSqBGVuo,25766
|
|
34
|
+
AOT_biomaps/AOT_Recon/AOT_Optimizers/MLEM.py,sha256=n_YYZ8NbubpTe5dn_6UjCBsW6Koa0OkF5VdKzseWQeU,21279
|
|
35
|
+
AOT_biomaps/AOT_Recon/AOT_Optimizers/PDHG.py,sha256=5w4klYKAct9_gnlyocIiJfDrQUdz_VhXQVSpfjrjvNU,7927
|
|
36
|
+
AOT_biomaps/AOT_Recon/AOT_Optimizers/__init__.py,sha256=tNGVulINaqQZzcs5cvCMAT5ypGdoFWRnxtl9y7ePECk,106
|
|
37
|
+
AOT_biomaps/AOT_Recon/AOT_PotentialFunctions/Huber.py,sha256=dRd1t5OBag_gVmfji3L0QrA1GJ_702LcCkLH32Bot0M,3285
|
|
38
|
+
AOT_biomaps/AOT_Recon/AOT_PotentialFunctions/Quadratic.py,sha256=wTbzcXxMdEl9ReEXrL43DOJQecokBwJYU_s2kQUASZY,2545
|
|
39
|
+
AOT_biomaps/AOT_Recon/AOT_PotentialFunctions/RelativeDifferences.py,sha256=ZlWaKsNPCMfy4fWxYFT2pSoKMbysQkJH4N1WbbWncq4,2493
|
|
40
|
+
AOT_biomaps/AOT_Recon/AOT_PotentialFunctions/__init__.py,sha256=RwrJdLOFbAFBFnRxo5xdlOyeZgtQRDaRWDN9-uCGUiY,84
|
|
41
|
+
AOT_biomaps/AOT_Recon/AOT_SparseSMatrix/SparseSMatrix_CSR.py,sha256=rZigEUe0d1reCBU-IT4LexbO5uUyps-ZkzhdH3j0PLc,12408
|
|
42
|
+
AOT_biomaps/AOT_Recon/AOT_SparseSMatrix/SparseSMatrix_SELL.py,sha256=WTqHBeglUxRx-jy6CcoETgqYSSHYTwi2zR5NrJcPXGU,14449
|
|
43
|
+
AOT_biomaps/AOT_Recon/AOT_SparseSMatrix/__init__.py,sha256=8nou-hqjQjuCTLhoL5qv4EM_lMPFviAZAZKSPhi84jE,67
|
|
44
|
+
aot_biomaps-2.9.279.dist-info/METADATA,sha256=cMJJ5rqoscZbvoGZ27y57VZ0aGzT7-2DLp_O4CFLyRI,700
|
|
45
|
+
aot_biomaps-2.9.279.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
46
|
+
aot_biomaps-2.9.279.dist-info/top_level.txt,sha256=6STF-lT4kaAnBHJYCripmN5mZABoHjMuY689JdiDphk,12
|
|
47
|
+
aot_biomaps-2.9.279.dist-info/RECORD,,
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
AOT_biomaps/Config.py,sha256=ghEOP1n8aO1pR-su13wMeAZAxZRfry5hH67NbtZ8SqI,3614
|
|
2
|
-
AOT_biomaps/Settings.py,sha256=v8fPhnvvcfBJP29m1RLOTEr3jndGLGwbUiORXmsj2Bo,2853
|
|
3
|
-
AOT_biomaps/__init__.py,sha256=20wNGK73pbEWe67C43bQhUWM3v7HdbBSIC9MRGHh57g,4146
|
|
4
|
-
AOT_biomaps/AOT_Acoustic/AcousticEnums.py,sha256=s5kXa6jKzbS4btwbubrVcynLOr0yg5tth5vL_FGfbMk,1802
|
|
5
|
-
AOT_biomaps/AOT_Acoustic/AcousticTools.py,sha256=4rYiUB0A_TwcNpqp3HBpXznI3IZmKztgXqZwL9DJDaw,10913
|
|
6
|
-
AOT_biomaps/AOT_Acoustic/FocusedWave.py,sha256=3kGKKDx_3Msy5COYqIwzROPORGWvNjw8UsDanBfkMXE,11037
|
|
7
|
-
AOT_biomaps/AOT_Acoustic/IrregularWave.py,sha256=yZhtxkR6zlciRcEpdTR0BAhvgQl40XHKFaF8f4VXarE,3035
|
|
8
|
-
AOT_biomaps/AOT_Acoustic/PlaneWave.py,sha256=xza-rj5AUWDecLkGDxRcULrwZVWeBvGnEP2d51TyR04,1447
|
|
9
|
-
AOT_biomaps/AOT_Acoustic/StructuredWave.py,sha256=LlHBxGYmTsM1gQVaJXlUxIOsqg6zTIPBAZK46v3UUiE,18205
|
|
10
|
-
AOT_biomaps/AOT_Acoustic/__init__.py,sha256=t9M2rRqa_L9pk7W2FeELTkHEMuP4DBr4gBRldMqsQbg,491
|
|
11
|
-
AOT_biomaps/AOT_Acoustic/_mainAcoustic.py,sha256=ItFA0DN7arucuBMdMAC178T-Fk6-h2EeHoBqMZfquf8,43729
|
|
12
|
-
AOT_biomaps/AOT_Experiment/Focus.py,sha256=B2nBawmv-NG2AWJx9zgQ8GlN6aFB9FwTSqX-M-phKXg,3193
|
|
13
|
-
AOT_biomaps/AOT_Experiment/Tomography.py,sha256=H3DZKSzoGZlV9gEpRyCgIW7KPn-qZn3V2RTmf6DUrmE,20901
|
|
14
|
-
AOT_biomaps/AOT_Experiment/__init__.py,sha256=H9zMLeBLA6uhbaHohAa-2u5mDDxqJi8oE5c6tShdQp8,308
|
|
15
|
-
AOT_biomaps/AOT_Experiment/_mainExperiment.py,sha256=YNSIHJKqSorOXKMEPYEUJ-bbkHN61Ze2XW3jODB--rQ,22290
|
|
16
|
-
AOT_biomaps/AOT_Optic/Absorber.py,sha256=jEodzRy7gkEH-wbazVasRQiri0dU16BfapmR-qnTSvM,867
|
|
17
|
-
AOT_biomaps/AOT_Optic/Laser.py,sha256=uzQwxswjU0kZWix3CmZLoWmhsBa3VhN27STprNv-xB8,2986
|
|
18
|
-
AOT_biomaps/AOT_Optic/OpticEnums.py,sha256=b349_JyjHqQohmjK4Wke-A_HLGaqb3_BKbyUqFC4jxY,499
|
|
19
|
-
AOT_biomaps/AOT_Optic/__init__.py,sha256=HSUVhfz0NzwHHZZ9KP9Xyfu33IgP_rYJX86J-gEROlo,321
|
|
20
|
-
AOT_biomaps/AOT_Optic/_mainOptic.py,sha256=LS-XHkT5yukGOV9BH8PFV3uiQkwE3IBb-8fk3WaCFWQ,6487
|
|
21
|
-
AOT_biomaps/AOT_Recon/AlgebraicRecon.py,sha256=7H49yxv-75GRNw-B_nL1Z4xKH5I7o7iND6qFDh2nqHM,40736
|
|
22
|
-
AOT_biomaps/AOT_Recon/AnalyticRecon.py,sha256=ik1mxreUXhsLzSKKZTlg0VwlLLWRneNmBEK7l-5-ebs,7452
|
|
23
|
-
AOT_biomaps/AOT_Recon/BayesianRecon.py,sha256=x5YsZqR_b_vzoXymhe20XAykolYXs5CjIKef8JpyVi8,8921
|
|
24
|
-
AOT_biomaps/AOT_Recon/DeepLearningRecon.py,sha256=7B-f6AdMpYj0PoLv6tmAxE2Qxyxe1ol0YNAbFMxIAiU,1247
|
|
25
|
-
AOT_biomaps/AOT_Recon/PrimalDualRecon.py,sha256=NM1XLaWKFnbNXR3eoHdeHbuKg8Tya1VwZeTElk1pHP8,4164
|
|
26
|
-
AOT_biomaps/AOT_Recon/ReconEnums.py,sha256=RLJz12CRjJpGZlnqyaN0y3EECsoMVmCaVdZvwXeJZ7c,18098
|
|
27
|
-
AOT_biomaps/AOT_Recon/ReconTools.py,sha256=mqT5kPFyn2uBMhbRnQ3YmFPipKQQmTYuZ32SSSMB2Ts,11518
|
|
28
|
-
AOT_biomaps/AOT_Recon/__init__.py,sha256=LDbNpsjS8_TJrXMKzkpzSAj5trVuCW57AWQaJBrzd0I,244
|
|
29
|
-
AOT_biomaps/AOT_Recon/_mainRecon.py,sha256=y-VWFR0NZOF3bqhWRcySxakW5vziVkAs55CeSNzv1os,9893
|
|
30
|
-
AOT_biomaps/AOT_Recon/AOT_Optimizers/DEPIERRO.py,sha256=GdqZX9fVtkEU8-Md8YkCkpIPNiGuPwx9ZaxwzXJbdY0,10844
|
|
31
|
-
AOT_biomaps/AOT_Recon/AOT_Optimizers/LS.py,sha256=IqcBz6BzJZt6YafIEwN9brZvta-n36rNhqoPCGy9_cA,13752
|
|
32
|
-
AOT_biomaps/AOT_Recon/AOT_Optimizers/MAPEM.py,sha256=P5Sp6jC7cQTB__IEUtdkRMJFb3Z3oq9nB_4ZMzaqzJw,20811
|
|
33
|
-
AOT_biomaps/AOT_Recon/AOT_Optimizers/MLEM.py,sha256=vnkIYTIXuMeT5rs6UjPN4zL0XWqIg5u115bE7hPwhqE,11260
|
|
34
|
-
AOT_biomaps/AOT_Recon/AOT_Optimizers/PDHG.py,sha256=OfOEIEAD_H3x7W_cVTIfUZNHqS_mOe5rCmLs0otK1Ps,7799
|
|
35
|
-
AOT_biomaps/AOT_Recon/AOT_Optimizers/__init__.py,sha256=tNGVulINaqQZzcs5cvCMAT5ypGdoFWRnxtl9y7ePECk,106
|
|
36
|
-
AOT_biomaps/AOT_Recon/AOT_PotentialFunctions/Huber.py,sha256=dRd1t5OBag_gVmfji3L0QrA1GJ_702LcCkLH32Bot0M,3285
|
|
37
|
-
AOT_biomaps/AOT_Recon/AOT_PotentialFunctions/Quadratic.py,sha256=wTbzcXxMdEl9ReEXrL43DOJQecokBwJYU_s2kQUASZY,2545
|
|
38
|
-
AOT_biomaps/AOT_Recon/AOT_PotentialFunctions/RelativeDifferences.py,sha256=dgB3Vt40S5D1VerHr-h-YnzB5xNCt6amE19-C0zyIpU,2253
|
|
39
|
-
AOT_biomaps/AOT_Recon/AOT_PotentialFunctions/__init__.py,sha256=RwrJdLOFbAFBFnRxo5xdlOyeZgtQRDaRWDN9-uCGUiY,84
|
|
40
|
-
aot_biomaps-2.9.138.dist-info/METADATA,sha256=LfeuhKVnEu-CRT5iJm0FDuwP8mVkwK-v3HjT6BqtPuI,663
|
|
41
|
-
aot_biomaps-2.9.138.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
42
|
-
aot_biomaps-2.9.138.dist-info/top_level.txt,sha256=6STF-lT4kaAnBHJYCripmN5mZABoHjMuY689JdiDphk,12
|
|
43
|
-
aot_biomaps-2.9.138.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|