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.

Files changed (31) hide show
  1. AOT_biomaps/AOT_Acoustic/AcousticTools.py +35 -115
  2. AOT_biomaps/AOT_Acoustic/StructuredWave.py +2 -2
  3. AOT_biomaps/AOT_Acoustic/_mainAcoustic.py +22 -18
  4. AOT_biomaps/AOT_Experiment/Tomography.py +74 -4
  5. AOT_biomaps/AOT_Experiment/_mainExperiment.py +102 -68
  6. AOT_biomaps/AOT_Optic/_mainOptic.py +124 -58
  7. AOT_biomaps/AOT_Recon/AOT_Optimizers/DEPIERRO.py +72 -108
  8. AOT_biomaps/AOT_Recon/AOT_Optimizers/LS.py +474 -289
  9. AOT_biomaps/AOT_Recon/AOT_Optimizers/MAPEM.py +173 -68
  10. AOT_biomaps/AOT_Recon/AOT_Optimizers/MLEM.py +360 -154
  11. AOT_biomaps/AOT_Recon/AOT_Optimizers/PDHG.py +150 -111
  12. AOT_biomaps/AOT_Recon/AOT_PotentialFunctions/RelativeDifferences.py +10 -14
  13. AOT_biomaps/AOT_Recon/AOT_SparseSMatrix/SparseSMatrix_CSR.py +281 -0
  14. AOT_biomaps/AOT_Recon/AOT_SparseSMatrix/SparseSMatrix_SELL.py +328 -0
  15. AOT_biomaps/AOT_Recon/AOT_SparseSMatrix/__init__.py +2 -0
  16. AOT_biomaps/AOT_Recon/AOT_biomaps_kernels.cubin +0 -0
  17. AOT_biomaps/AOT_Recon/AlgebraicRecon.py +359 -238
  18. AOT_biomaps/AOT_Recon/AnalyticRecon.py +29 -41
  19. AOT_biomaps/AOT_Recon/BayesianRecon.py +165 -91
  20. AOT_biomaps/AOT_Recon/DeepLearningRecon.py +4 -1
  21. AOT_biomaps/AOT_Recon/PrimalDualRecon.py +175 -31
  22. AOT_biomaps/AOT_Recon/ReconEnums.py +38 -3
  23. AOT_biomaps/AOT_Recon/ReconTools.py +184 -77
  24. AOT_biomaps/AOT_Recon/__init__.py +1 -0
  25. AOT_biomaps/AOT_Recon/_mainRecon.py +144 -74
  26. AOT_biomaps/__init__.py +4 -36
  27. {aot_biomaps-2.9.138.dist-info → aot_biomaps-2.9.279.dist-info}/METADATA +2 -1
  28. aot_biomaps-2.9.279.dist-info/RECORD +47 -0
  29. aot_biomaps-2.9.138.dist-info/RECORD +0 -43
  30. {aot_biomaps-2.9.138.dist-info → aot_biomaps-2.9.279.dist-info}/WHEEL +0 -0
  31. {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', isMultiGPU = True if config.numGPUs > 1 else False, isMultiCPU = True):
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 calculateCRC(self,iteration,ROI_mask = None):
33
+ def save(self, withTumor=True, overwrite=False, date=None, show_logs=True):
34
34
  """
35
- Computes the Contrast Recovery Coefficient (CRC) for a given ROI.
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
- if self.reconType is ReconType.Analytic:
38
- raise TypeError(f"Impossible to calculate CRC with analytical reconstruction")
39
- elif self.reconType is None:
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
- if isinstance(self.reconPhantom, list) and len(self.reconPhantom) == 1:
49
- raise ValueError("Reconstructed Image with tumor is a single frame. Run reconstruction with isSavingEachIteration=True to get a sequence of frames.")
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 = False, isSavingEachIteration=True)
54
- if ROI_mask is not None:
55
- recon_ratio = np.mean(self.reconPhantom[iteration][ROI_mask]) / np.mean(self.reconLaser[iteration][ROI_mask])
56
- lambda_ratio = np.mean(self.experiment.OpticImage.phantom[ROI_mask]) / np.mean(self.experiment.OpticImage.laser[ROI_mask])
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
- recon_ratio = np.mean(self.reconPhantom[iteration]) / np.mean(self.reconLaser[iteration])
59
- lambda_ratio = np.mean(self.experiment.OpticImage.phantom) / np.mean(self.experiment.OpticImage.laser)
60
-
61
- # Compute CRC
62
- CRC = (recon_ratio - 1) / (lambda_ratio - 1)
63
- return CRC
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
- # Phantom original
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
- self.experiment.OpticImage.phantom,
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("Phantom with tumor")
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
- # Phantom reconstruit
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
- # Laser original
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
- self.experiment.OpticImage.laser.intensity,
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("Laser without tumor")
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
- # Laser reconstruit
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(im1, cax=cbar_ax, orientation='horizontal')
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.138'
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.138
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,,