tomwer 1.2.0a2__py3-none-any.whl → 1.2.0a4__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.
Files changed (34) hide show
  1. orangecontrib/tomwer/widgets/control/SingleTomoObjOW.py +0 -6
  2. orangecontrib/tomwer/widgets/reconstruction/DarkRefAndCopyOW.py +6 -2
  3. orangecontrib/tomwer/widgets/reconstruction/NabuHelicalPrepareWeightsDoubleOW.py +169 -169
  4. tomwer/app/canvas_launcher/mainwindow.py +0 -3
  5. tomwer/app/imagekeyeditor.py +1 -0
  6. tomwer/app/imagekeyupgrader.py +2 -0
  7. tomwer/app/nxtomoeditor.py +2 -0
  8. tomwer/app/zstitching.py +1 -0
  9. tomwer/core/process/reconstruction/nabu/nabucommon.py +57 -12
  10. tomwer/core/process/reconstruction/nabu/nabuscores.py +3 -2
  11. tomwer/core/process/reconstruction/nabu/nabuslices.py +7 -9
  12. tomwer/core/process/reconstruction/nabu/nabuvolume.py +10 -9
  13. tomwer/core/process/reconstruction/nabu/utils.py +10 -36
  14. tomwer/core/process/test/test_nabu.py +5 -5
  15. tomwer/gui/visualization/reconstructionparameters.py +9 -1
  16. tomwer/gui/visualization/volumeviewer.py +2 -0
  17. tomwer/resources/gui/icons/esrf_1.svg +307 -0
  18. tomwer/resources/gui/icons/triangle.svg +80 -0
  19. tomwer/version.py +1 -1
  20. {tomwer-1.2.0a2.dist-info → tomwer-1.2.0a4.dist-info}/METADATA +1 -1
  21. {tomwer-1.2.0a2.dist-info → tomwer-1.2.0a4.dist-info}/RECORD +27 -32
  22. tomwer/third_party/__init__.py +0 -0
  23. tomwer/third_party/nabu/__init__.py +0 -0
  24. tomwer/third_party/nabu/preproc/__init__.py +0 -0
  25. tomwer/third_party/nabu/preproc/phase.py +0 -387
  26. tomwer/third_party/nabu/utils.py +0 -201
  27. tomwer/third_party/tango/__init__.py +0 -0
  28. tomwer/third_party/tango/device.py +0 -15
  29. /tomwer-1.2.0a2-py3.11-nspkg.pth → /tomwer-1.2.0a4-py3.11-nspkg.pth +0 -0
  30. {tomwer-1.2.0a2.dist-info → tomwer-1.2.0a4.dist-info}/LICENSE +0 -0
  31. {tomwer-1.2.0a2.dist-info → tomwer-1.2.0a4.dist-info}/WHEEL +0 -0
  32. {tomwer-1.2.0a2.dist-info → tomwer-1.2.0a4.dist-info}/entry_points.txt +0 -0
  33. {tomwer-1.2.0a2.dist-info → tomwer-1.2.0a4.dist-info}/namespace_packages.txt +0 -0
  34. {tomwer-1.2.0a2.dist-info → tomwer-1.2.0a4.dist-info}/top_level.txt +0 -0
@@ -224,7 +224,9 @@ class VolumeRunner(_NabuBaseReconstructor):
224
224
  # force overwrite results
225
225
  if "output" not in self.configuration:
226
226
  self.configuration["output"] = {}
227
- config_slices = self._treateOutputConfig(self.configuration)
227
+ config_slices, cfg_folder = self._treateOutputConfig(self.configuration)
228
+
229
+ # force overwriting results
228
230
  config_slices["output"].update({"overwrite_results": 1})
229
231
 
230
232
  # check and clamp `start_z` and `end_z`
@@ -242,12 +244,6 @@ class VolumeRunner(_NabuBaseReconstructor):
242
244
  value = -1
243
245
  config_slices["reconstruction"][key] = value
244
246
 
245
- cfg_folder = os.path.join(
246
- config_slices["output"]["location"], settings.NABU_CFG_FILE_FOLDER
247
- )
248
- if not os.path.exists(cfg_folder):
249
- os.makedirs(cfg_folder)
250
-
251
247
  name = (
252
248
  config_slices["output"]["file_prefix"] + settings.NABU_CONFIG_FILE_EXTENSION
253
249
  )
@@ -256,6 +252,9 @@ class VolumeRunner(_NabuBaseReconstructor):
256
252
  conf_file = os.path.join(cfg_folder, name)
257
253
  _logger.info(f"{self.scan}: create {conf_file}")
258
254
 
255
+ # make sure output location exists
256
+ os.makedirs(config_slices["output"]["location"], exist_ok=True)
257
+
259
258
  # add some tomwer metadata and save the configuration
260
259
  # note: for now the section is ignored by nabu but shouldn't stay that way
261
260
  with utils.TomwerInfo(config_slices) as config_to_dump:
@@ -317,7 +316,9 @@ class VolumeRunner(_NabuBaseReconstructor):
317
316
  :return: (nabu config dict, nabu extra options)
318
317
  """
319
318
  config = copy.deepcopy(config)
320
- config = super()._treateOutputSliceConfig(config)
319
+ config, nabu_cfg_folder = super()._treateOutputSliceConfig(config)
320
+ os.makedirs(config["output"]["location"], exist_ok=True)
321
+
321
322
  # adapt config_s to specific volume treatment
322
323
  if "postproc" in config:
323
324
  config["postproc"] = config["postproc"]
@@ -329,7 +330,7 @@ class VolumeRunner(_NabuBaseReconstructor):
329
330
  config["reconstruction"]["end_z"] = config["end_z"]
330
331
  del config["end_z"]
331
332
 
332
- return config
333
+ return config, nabu_cfg_folder
333
334
 
334
335
  @docstring(_NabuBaseReconstructor)
335
336
  def _get_file_basename_reconstruction(self, pag, db, ctf):
@@ -159,7 +159,7 @@ def get_recons_volume_identifier(
159
159
  if file_format in ("hdf5", "h5", "hdf"):
160
160
  if slice_index is not None:
161
161
  # case of a single hdf5 file
162
- file_name = "_".join((file_prefix, str(slice_index).zfill(4)))
162
+ file_name = "_".join((file_prefix, str(slice_index).zfill(6)))
163
163
  else:
164
164
  file_name = file_prefix
165
165
  file_name = ".".join((file_name, file_format))
@@ -179,23 +179,13 @@ def get_recons_volume_identifier(
179
179
  elif file_format in ("vol", "raw"):
180
180
  if slice_index is not None:
181
181
  # case of a single hdf5 file
182
- file_name = "_".join((file_prefix, str(slice_index).zfill(4)))
182
+ file_name = "_".join((file_prefix, str(slice_index).zfill(6)))
183
183
  else:
184
184
  file_name = file_prefix
185
- # on 2022.3.x the location seems invalid for nabu. Add this second location to
186
- # handle most of the case.
187
- fix_nabu = os.path.join(file_prefix, file_name)
188
-
189
185
  file_name = ".".join((file_name, file_format))
190
186
  file_path = os.path.join(location, file_name)
191
187
 
192
- file_name_fix_nabu = ".".join((fix_nabu, file_format))
193
- file_path_fix_nabu = os.path.join(location, file_name_fix_nabu)
194
-
195
- volumes = (
196
- RawVolume(file_path=file_path_fix_nabu),
197
- RawVolume(file_path=file_path),
198
- )
188
+ volumes = (RawVolume(file_path=file_path),)
199
189
  elif file_format in ("jp2", "jp2k", "edf", "tiff"):
200
190
  if file_format in ("jp2k", "jp2"):
201
191
  constructor = JP2KVolume
@@ -205,31 +195,15 @@ def get_recons_volume_identifier(
205
195
  constructor = TIFFVolume
206
196
  else:
207
197
  raise NotImplementedError
208
- output_extension = file_format
209
198
  basename = file_prefix
199
+ file_path = location
200
+ volumes = (
201
+ constructor(
202
+ folder=location,
203
+ volume_basename=basename,
204
+ ),
205
+ )
210
206
 
211
- if slice_index is None and start_z is None and end_z is None:
212
- # if this is a single slice
213
- file_path = ".".join(
214
- (
215
- os.path.join(location, file_prefix, file_prefix),
216
- output_extension,
217
- )
218
- )
219
- # TODO: in the future we might want to provide data_slice according to z values
220
- volumes = (
221
- constructor(
222
- folder=os.path.join(location, file_prefix),
223
- volume_basename=basename,
224
- ),
225
- )
226
- else:
227
- volumes = (
228
- constructor(
229
- folder=os.path.join(location, file_prefix),
230
- volume_basename=basename,
231
- ),
232
- )
233
207
  # case of the multitiff. Not handled by tomwer
234
208
  # elif file_format == "tiff":
235
209
  # # for single frame tiff nabu uses another convention by saving it 'directly'.
@@ -127,7 +127,7 @@ class TestNabuIni(unittest.TestCase):
127
127
  # check volume and slice .cfg files for nabu reconstruction are here
128
128
  for file_name in (
129
129
  os.path.basename(self.scan.path) + ".cfg",
130
- os.path.basename(self.scan.path) + "slice_0001" + ".cfg",
130
+ os.path.basename(self.scan.path) + "slice_000001" + ".cfg",
131
131
  ):
132
132
  with self.subTest(file_name=file_name):
133
133
  self.assertTrue(
@@ -151,7 +151,7 @@ class TestNabuIni(unittest.TestCase):
151
151
  # check volume and slice .cfg files for nabu reconstruction are here
152
152
  for file_name in (
153
153
  os.path.basename(self.scan.path) + "pag_db0100.cfg",
154
- os.path.basename(self.scan.path) + "slice_pag_0001_db0100" + ".cfg",
154
+ os.path.basename(self.scan.path) + "slice_pag_000001_db0100" + ".cfg",
155
155
  ):
156
156
  with self.subTest(file_name=file_name):
157
157
  self.assertTrue(
@@ -178,7 +178,7 @@ class TestNabuIni(unittest.TestCase):
178
178
  ini_files.append(
179
179
  os.path.basename(self.scan.path)
180
180
  + "slice_"
181
- + str(slice_index).zfill(4)
181
+ + str(slice_index).zfill(6)
182
182
  + ".cfg"
183
183
  )
184
184
 
@@ -222,7 +222,7 @@ class TestNabuIni(unittest.TestCase):
222
222
  # add slice ini file
223
223
  ini_files.append(
224
224
  os.path.basename(self.scan.path)
225
- + "slice_pag_0001_db"
225
+ + "slice_pag_000001_db"
226
226
  + str(int(pag_db)).zfill(4)
227
227
  + ".cfg"
228
228
  )
@@ -265,7 +265,7 @@ class TestNabuIni(unittest.TestCase):
265
265
  ini_files.append(
266
266
  os.path.basename(self.scan.path)
267
267
  + "slice_pag_"
268
- + str(slice_index).zfill(4)
268
+ + str(slice_index).zfill(6)
269
269
  + "_db"
270
270
  + str(pag_db).zfill(4)
271
271
  + ".cfg"
@@ -160,15 +160,23 @@ class ReconstructionParameters(qt.QWidget):
160
160
  # voxel size can be stored as pixel size (old version) or voxel size (new version)
161
161
  recons_params = metadata.get("processing_options", {}).get("reconstruction", {})
162
162
  voxel_size_cm = recons_params.get("voxel_size_cm", None)
163
+
163
164
  # now voxel size is expected to be a tuple of three elements
164
165
  if voxel_size_cm is not None:
165
166
  voxel_size_cm = voxel_size_cm[0]
167
+ # FIXME: load_ini seems to fail to remove some char like '(' or ')'... to be fixed or investigate
168
+ # simplest might be to filter those when dumping it to text file... ??? or to handle those at silx level
169
+ if isinstance(voxel_size_cm, str):
170
+ for char_to_ignore in (" ", "(", ")", "[", "]"):
171
+ voxel_size_cm = voxel_size_cm.replace(char_to_ignore, "")
166
172
  else:
167
173
  # backward compatibility with old volume
168
174
  voxel_size_cm = recons_params.get("pixel_size_cm", None)
169
175
  if voxel_size_cm is not None:
170
176
  voxel_size_cm = f"{float(voxel_size_cm):.8}"
171
- self._pixelSizeQLE.setText(voxel_size_cm if voxel_size_cm is not None else "")
177
+ self._pixelSizeQLE.setText(
178
+ str(voxel_size_cm) if voxel_size_cm is not None else ""
179
+ )
172
180
 
173
181
  def _setCor(self, metadata: dict):
174
182
  cor = (
@@ -357,6 +357,8 @@ class VolumeViewer(qt.QMainWindow):
357
357
  self._set_volume(data)
358
358
  # set reconstruction parameters
359
359
  try:
360
+ # warning: limitation expected for .vol as it gets two configuration file. The default one is vol.info and does not contains
361
+ # any of the metadata 'distance', 'pixel size'... but it is here for backward compatiblity
360
362
  self._reconsWidget.setVolumeMetadata(
361
363
  volume.metadata or volume.load_metadata()
362
364
  )
@@ -0,0 +1,307 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+
4
+ <svg
5
+ width="48"
6
+ height="48"
7
+ viewBox="0 0 12.7 12.7"
8
+ version="1.1"
9
+ id="svg911"
10
+ xml:space="preserve"
11
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
12
+ sodipodi:docname="esrf_1.svg"
13
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
14
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
15
+ xmlns:xlink="http://www.w3.org/1999/xlink"
16
+ xmlns="http://www.w3.org/2000/svg"
17
+ xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
18
+ id="namedview913"
19
+ pagecolor="#ffffff"
20
+ bordercolor="#000000"
21
+ borderopacity="0.25"
22
+ inkscape:showpageshadow="2"
23
+ inkscape:pageopacity="0.0"
24
+ inkscape:pagecheckerboard="0"
25
+ inkscape:deskcolor="#d1d1d1"
26
+ inkscape:document-units="mm"
27
+ showgrid="false"
28
+ inkscape:zoom="6.7277216"
29
+ inkscape:cx="17.910967"
30
+ inkscape:cy="53.361304"
31
+ inkscape:window-width="1920"
32
+ inkscape:window-height="1131"
33
+ inkscape:window-x="0"
34
+ inkscape:window-y="32"
35
+ inkscape:window-maximized="1"
36
+ inkscape:current-layer="layer1" /><defs
37
+ id="defs908" /><g
38
+ inkscape:label="Layer 1"
39
+ inkscape:groupmode="layer"
40
+ id="layer1"><image
41
+ width="18.843178"
42
+ height="19.58782"
43
+ preserveAspectRatio="none"
44
+ xlink:href="data:image/png;base64,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
303
+ "
304
+ id="image1040"
305
+ x="-3.5774627"
306
+ y="-0.34973973"
307
+ inkscape:highlight-color="#0a51c2" /></g></svg>
@@ -0,0 +1,80 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+
4
+ <svg
5
+ width="48"
6
+ height="48"
7
+ viewBox="0 0 12.7 12.7"
8
+ version="1.1"
9
+ id="svg1097"
10
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
11
+ sodipodi:docname="triangle.svg"
12
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
13
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
14
+ xmlns="http://www.w3.org/2000/svg"
15
+ xmlns:svg="http://www.w3.org/2000/svg">
16
+ <sodipodi:namedview
17
+ id="namedview1099"
18
+ pagecolor="#ffffff"
19
+ bordercolor="#000000"
20
+ borderopacity="0.25"
21
+ inkscape:showpageshadow="2"
22
+ inkscape:pageopacity="0.0"
23
+ inkscape:pagecheckerboard="0"
24
+ inkscape:deskcolor="#d1d1d1"
25
+ inkscape:document-units="mm"
26
+ showgrid="false"
27
+ inkscape:zoom="9.5144352"
28
+ inkscape:cx="29.166208"
29
+ inkscape:cy="27.852415"
30
+ inkscape:window-width="1920"
31
+ inkscape:window-height="1163"
32
+ inkscape:window-x="1920"
33
+ inkscape:window-y="0"
34
+ inkscape:window-maximized="1"
35
+ inkscape:current-layer="layer1" />
36
+ <defs
37
+ id="defs1094" />
38
+ <g
39
+ inkscape:label="Layer 1"
40
+ inkscape:groupmode="layer"
41
+ id="layer1">
42
+ <path
43
+ style="fill:#ffffff;stroke:#000000;stroke-width:0.4;stroke-linejoin:round"
44
+ d="M 1.8939624,10.526614 10.57789,10.508604 10.61321,2.0330588 Z"
45
+ id="path1281" />
46
+ <path
47
+ style="fill:#ffffff;stroke:#000000;stroke-width:0.4;stroke-linejoin:round"
48
+ d="M 4.5730925,8.0439775 5.0764382,8.5595639"
49
+ id="path1381-3" />
50
+ <path
51
+ style="fill:#ffffff;stroke:#000000;stroke-width:0.4;stroke-linejoin:round"
52
+ d="M 5.5291259,7.0902652 6.0324716,7.6058516"
53
+ id="path1381-6" />
54
+ <path
55
+ style="fill:#ffffff;stroke:#000000;stroke-width:0.4;stroke-linejoin:round"
56
+ d="M 6.5287393,6.2125496 7.032085,6.728136"
57
+ id="path1381-7" />
58
+ <path
59
+ style="fill:#ffffff;stroke:#000000;stroke-width:0.4;stroke-linejoin:round"
60
+ d="M 7.4875733,5.2270671 7.990919,5.7426535"
61
+ id="path1381-5" />
62
+ <path
63
+ style="fill:#ffffff;stroke:#000000;stroke-width:0.4;stroke-linejoin:round"
64
+ d="M 8.3428853,4.4034115 8.846231,4.9189979"
65
+ id="path1381-35" />
66
+ <path
67
+ style="fill:#ffffff;stroke:#000000;stroke-width:0.4;stroke-linejoin:round"
68
+ d="M 7.3583237,9.2113359 9.4546511,9.2107622 9.4437729,6.976487 Z"
69
+ id="path1283"
70
+ sodipodi:nodetypes="cccc" />
71
+ <path
72
+ style="fill:#ffffff;stroke:#000000;stroke-width:0.4;stroke-linejoin:round"
73
+ d="M 3.5387896,9.0166385 4.0421353,9.5322249"
74
+ id="path1381" />
75
+ <path
76
+ style="fill:#ffffff;stroke:#000000;stroke-width:0.4;stroke-linejoin:round"
77
+ d="m 9.1315815,3.5812101 0.503346,0.5155864"
78
+ id="path1381-62" />
79
+ </g>
80
+ </svg>
tomwer/version.py CHANGED
@@ -79,7 +79,7 @@ MAJOR = 1
79
79
  MINOR = 2
80
80
  MICRO = 0
81
81
  RELEV = "alpha" # <16
82
- SERIAL = 2 # <16
82
+ SERIAL = 4 # <16
83
83
 
84
84
  date = __date__
85
85
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tomwer
3
- Version: 1.2.0a2
3
+ Version: 1.2.0a4
4
4
  Summary: "tomography workflow tools"
5
5
  Home-page: https://gitlab.esrf.fr/tomotools/tomwer
6
6
  Author: data analysis unit