tomwer 1.2.8__py3-none-any.whl → 1.3.0a0__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 (253) hide show
  1. orangecontrib/tomwer/tutorials/icat_publication.ows +58 -0
  2. orangecontrib/tomwer/widgets/__init__.py +1 -0
  3. orangecontrib/tomwer/widgets/control/DataDiscoveryOW.py +2 -2
  4. orangecontrib/tomwer/widgets/control/DataListOW.py +9 -7
  5. orangecontrib/tomwer/widgets/control/DataSelectorOW.py +21 -10
  6. orangecontrib/tomwer/widgets/control/EDF2NXTomomillOW.py +11 -5
  7. orangecontrib/tomwer/widgets/control/EmailOW.py +4 -4
  8. orangecontrib/tomwer/widgets/control/NXTomomillOW.py +31 -18
  9. orangecontrib/tomwer/widgets/control/NXtomoConcatenate.py +14 -7
  10. orangecontrib/tomwer/widgets/control/NotifierOW.py +1 -0
  11. orangecontrib/tomwer/widgets/control/VolumeSelector.py +7 -4
  12. orangecontrib/tomwer/widgets/control/VolumeSymLinkOW.py +182 -182
  13. orangecontrib/tomwer/widgets/debugtools/DatasetGeneratorOW.py +4 -4
  14. orangecontrib/tomwer/widgets/edit/DarkFlatPatchOW.py +4 -4
  15. orangecontrib/tomwer/widgets/edit/ImageKeyEditorOW.py +3 -3
  16. orangecontrib/tomwer/widgets/edit/ImageKeyUpgraderOW.py +2 -0
  17. orangecontrib/tomwer/widgets/edit/NXtomoEditorOW.py +3 -3
  18. orangecontrib/tomwer/widgets/edit/test/test_nxtomo_editor.py +3 -3
  19. orangecontrib/tomwer/widgets/icat/PublishProcessedDataOW.py +115 -0
  20. orangecontrib/tomwer/widgets/icat/RawDataScreenshotCreatorOW.py +98 -0
  21. orangecontrib/tomwer/widgets/icat/SaveToGalleryAndPublishOW.py +129 -0
  22. orangecontrib/tomwer/widgets/icat/__init__.py +13 -0
  23. orangecontrib/tomwer/widgets/icat/icons/add_gallery.png +0 -0
  24. orangecontrib/tomwer/widgets/icat/icons/add_gallery.svg +82 -0
  25. orangecontrib/tomwer/widgets/icat/icons/publish_processed_data.png +0 -0
  26. orangecontrib/tomwer/widgets/icat/icons/publish_processed_data.svg +95 -0
  27. orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.png +0 -0
  28. orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.svg +143 -0
  29. orangecontrib/tomwer/widgets/icons/tomwer_data_portal.png +0 -0
  30. orangecontrib/tomwer/widgets/icons/tomwer_data_portal.svg +76 -0
  31. orangecontrib/tomwer/widgets/reconstruction/AxisOW.py +9 -8
  32. orangecontrib/tomwer/widgets/reconstruction/CastNabuVolumeOW.py +3 -3
  33. orangecontrib/tomwer/widgets/reconstruction/NabuHelicalPrepareWeightsDoubleOW.py +179 -169
  34. orangecontrib/tomwer/widgets/reconstruction/NabuOW.py +23 -0
  35. orangecontrib/tomwer/widgets/reconstruction/NabuVolumeOW.py +39 -5
  36. orangecontrib/tomwer/widgets/reconstruction/SAAxisOW.py +7 -13
  37. orangecontrib/tomwer/widgets/reconstruction/SADeltaBetaOW.py +7 -17
  38. orangecontrib/tomwer/widgets/reconstruction/SinoNormOW.py +3 -4
  39. orangecontrib/tomwer/widgets/visualization/LivesliceOW.py +1 -1
  40. orangecontrib/tomwer/widgets/visualization/NXtomoMetadataViewerOW.py +3 -3
  41. orangecontrib/tomwer/widgets/visualization/VolumeViewerOW.py +3 -29
  42. tomwer/__main__.py +11 -58
  43. tomwer/app/canvas.py +8 -0
  44. tomwer/app/canvas_launcher/config.py +13 -11
  45. tomwer/app/darkref.py +1 -1
  46. tomwer/app/darkrefpatch.py +1 -1
  47. tomwer/app/imagekeyeditor.py +5 -5
  48. tomwer/app/imagekeyupgrader.py +5 -5
  49. tomwer/app/intensitynormalization.py +2 -2
  50. tomwer/app/radiostack.py +2 -2
  51. tomwer/app/zstitching.py +74 -3
  52. tomwer/core/cluster/cluster.py +26 -0
  53. tomwer/core/log/logger.py +7 -5
  54. tomwer/core/process/conditions/filters.py +1 -1
  55. tomwer/core/process/control/datalistener/datalistener.py +3 -3
  56. tomwer/core/process/control/nxtomoconcatenate.py +13 -13
  57. tomwer/core/process/control/nxtomomill.py +83 -25
  58. tomwer/core/process/control/scantransfer.py +11 -10
  59. tomwer/core/process/control/scanvalidator.py +3 -2
  60. tomwer/core/process/control/test/test_concatenate_nxtomos.py +9 -9
  61. tomwer/core/process/control/test/test_email.py +4 -4
  62. tomwer/core/process/control/test/test_h52nx_process.py +59 -7
  63. tomwer/core/process/control/test/test_volume_link.py +64 -64
  64. tomwer/core/process/control/timer.py +1 -1
  65. tomwer/core/process/control/volumesymlink.py +200 -200
  66. tomwer/core/process/edit/darkflatpatch.py +6 -6
  67. tomwer/core/process/edit/imagekeyeditor.py +17 -18
  68. tomwer/core/process/icat/__init__.py +0 -0
  69. tomwer/core/process/icat/createscreenshots.py +100 -0
  70. tomwer/core/process/icat/gallery.py +377 -0
  71. tomwer/core/process/icat/icatbase.py +36 -0
  72. tomwer/core/process/icat/publish.py +228 -0
  73. tomwer/core/process/icat/screenshots.py +26 -0
  74. tomwer/core/process/output.py +52 -0
  75. tomwer/core/process/reconstruction/axis/axis.py +17 -10
  76. tomwer/core/process/reconstruction/axis/mode.py +4 -0
  77. tomwer/core/process/reconstruction/axis/params.py +9 -4
  78. tomwer/core/process/reconstruction/darkref/darkrefs.py +8 -6
  79. tomwer/core/process/reconstruction/darkref/darkrefscopy.py +1 -1
  80. tomwer/core/process/reconstruction/darkref/params.py +1 -1
  81. tomwer/core/process/reconstruction/lamino/tofu.py +4 -4
  82. tomwer/core/process/reconstruction/nabu/castvolume.py +1 -1
  83. tomwer/core/process/reconstruction/nabu/helical.py +9 -5
  84. tomwer/core/process/reconstruction/nabu/nabucommon.py +32 -62
  85. tomwer/core/process/reconstruction/nabu/nabuscores.py +387 -61
  86. tomwer/core/process/reconstruction/nabu/nabuslices.py +33 -21
  87. tomwer/core/process/reconstruction/nabu/nabuvolume.py +37 -14
  88. tomwer/core/process/reconstruction/nabu/settings.py +2 -2
  89. tomwer/core/process/reconstruction/nabu/utils.py +129 -24
  90. tomwer/core/process/reconstruction/output.py +108 -0
  91. tomwer/core/process/reconstruction/saaxis/saaxis.py +233 -263
  92. tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py +140 -86
  93. tomwer/core/process/reconstruction/scores/params.py +4 -1
  94. tomwer/core/process/reconstruction/scores/scores.py +13 -0
  95. tomwer/core/process/reconstruction/test/test_axis_params.py +2 -2
  96. tomwer/core/process/reconstruction/test/test_darkref.py +3 -3
  97. tomwer/core/process/reconstruction/test/test_darkref_copy.py +3 -3
  98. tomwer/core/process/reconstruction/test/test_saaxis.py +3 -4
  99. tomwer/core/process/reconstruction/test/test_sadeltabeta.py +2 -2
  100. tomwer/core/process/stitching/nabustitcher.py +2 -2
  101. tomwer/core/process/test/test_axis.py +6 -6
  102. tomwer/core/process/test/test_dark_and_flat.py +10 -7
  103. tomwer/core/process/test/test_data_transfer.py +7 -6
  104. tomwer/core/process/test/test_nabu.py +4 -4
  105. tomwer/core/process/test/test_normalization.py +2 -2
  106. tomwer/core/scan/edfscan.py +4 -1
  107. tomwer/core/scan/hdf5scan.py +19 -500
  108. tomwer/core/scan/nxtomoscan.py +532 -0
  109. tomwer/core/scan/scanbase.py +42 -20
  110. tomwer/core/scan/scanfactory.py +13 -13
  111. tomwer/core/scan/test/test_future_scan.py +2 -2
  112. tomwer/core/scan/test/test_h5.py +12 -10
  113. tomwer/core/scan/test/test_process_registration.py +2 -2
  114. tomwer/core/scan/test/test_scan.py +4 -3
  115. tomwer/core/settings.py +20 -0
  116. tomwer/core/test/test_scanutils.py +8 -7
  117. tomwer/core/test/test_utils.py +33 -26
  118. tomwer/core/utils/__init__.py +0 -466
  119. tomwer/core/utils/deprecation.py +1 -1
  120. tomwer/core/utils/dictutils.py +14 -0
  121. tomwer/core/utils/lbsram.py +35 -0
  122. tomwer/core/utils/nxtomoutils.py +1 -1
  123. tomwer/core/utils/scanutils.py +6 -6
  124. tomwer/core/utils/spec.py +263 -0
  125. tomwer/core/volume/volumefactory.py +2 -2
  126. tomwer/gui/cluster/slurm.py +260 -60
  127. tomwer/gui/cluster/test/test_cluster.py +13 -0
  128. tomwer/gui/cluster/test/test_supervisor.py +2 -2
  129. tomwer/gui/configuration/__init__.py +0 -0
  130. tomwer/gui/{reconstruction/nabu → configuration}/action.py +1 -32
  131. tomwer/gui/configuration/level.py +22 -0
  132. tomwer/gui/control/actions.py +54 -0
  133. tomwer/gui/control/datalist.py +78 -16
  134. tomwer/gui/control/datalistener.py +4 -16
  135. tomwer/gui/control/{email.py → emailnotifier.py} +9 -18
  136. tomwer/gui/control/history.py +2 -2
  137. tomwer/gui/control/observations.py +2 -2
  138. tomwer/gui/control/reducedarkflatselector.py +1 -1
  139. tomwer/gui/control/selectorwidgetbase.py +36 -9
  140. tomwer/gui/control/serie/seriecreator.py +5 -22
  141. tomwer/gui/control/test/test_email.py +1 -1
  142. tomwer/gui/control/test/test_scanvalidator.py +6 -5
  143. tomwer/gui/control/test/test_single_tomo_obj.py +2 -2
  144. tomwer/gui/control/tomoobjdisplaymode.py +8 -0
  145. tomwer/gui/debugtools/datasetgenerator.py +3 -3
  146. tomwer/gui/edit/dkrfpatch.py +16 -22
  147. tomwer/gui/edit/imagekeyeditor.py +8 -11
  148. tomwer/gui/edit/nxtomoeditor.py +111 -44
  149. tomwer/gui/edit/nxtomowarmer.py +4 -4
  150. tomwer/gui/edit/test/test_dkrf_patch.py +7 -7
  151. tomwer/gui/edit/test/test_image_key_editor.py +3 -3
  152. tomwer/gui/edit/test/test_nx_editor.py +40 -16
  153. tomwer/gui/icat/__init__.py +0 -0
  154. tomwer/gui/icat/createscreenshots.py +80 -0
  155. tomwer/gui/icat/gallery.py +214 -0
  156. tomwer/gui/icat/publish.py +187 -0
  157. tomwer/gui/reconstruction/axis/axis.py +171 -57
  158. tomwer/gui/reconstruction/axis/radioaxis.py +80 -95
  159. tomwer/gui/reconstruction/darkref/darkrefcopywidget.py +3 -2
  160. tomwer/gui/reconstruction/lamino/tofu/projections.py +1 -1
  161. tomwer/gui/reconstruction/lamino/tofu/tofuoutput.py +3 -6
  162. tomwer/gui/reconstruction/nabu/castvolume.py +1 -1
  163. tomwer/gui/reconstruction/nabu/check.py +9 -9
  164. tomwer/gui/reconstruction/nabu/helical.py +29 -12
  165. tomwer/gui/reconstruction/nabu/nabuconfig/base.py +2 -4
  166. tomwer/gui/reconstruction/nabu/nabuconfig/output.py +110 -33
  167. tomwer/gui/reconstruction/nabu/nabuconfig/phase.py +9 -12
  168. tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py +219 -29
  169. tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py +3 -6
  170. tomwer/gui/reconstruction/nabu/nabuflow.py +12 -20
  171. tomwer/gui/reconstruction/nabu/slices.py +6 -7
  172. tomwer/gui/reconstruction/nabu/volume.py +22 -10
  173. tomwer/gui/reconstruction/normalization/intensity.py +15 -23
  174. tomwer/gui/reconstruction/saaxis/corrangeselector.py +7 -23
  175. tomwer/gui/reconstruction/saaxis/dimensionwidget.py +1 -1
  176. tomwer/gui/reconstruction/saaxis/saaxis.py +7 -9
  177. tomwer/gui/reconstruction/sadeltabeta/saadeltabeta.py +2 -1
  178. tomwer/gui/reconstruction/scores/control.py +2 -9
  179. tomwer/gui/reconstruction/scores/scoreplot.py +11 -5
  180. tomwer/gui/reconstruction/test/test_axis.py +23 -12
  181. tomwer/gui/reconstruction/test/test_lamino.py +8 -3
  182. tomwer/gui/reconstruction/test/test_nabu.py +28 -9
  183. tomwer/gui/reconstruction/test/test_saaxis.py +3 -3
  184. tomwer/gui/reconstruction/test/test_sadeltabeta.py +2 -2
  185. tomwer/gui/settings.py +5 -28
  186. tomwer/gui/stackplot.py +2 -5
  187. tomwer/gui/stitching/action.py +49 -0
  188. tomwer/gui/stitching/config/axisparams.py +7 -24
  189. tomwer/gui/stitching/config/output.py +10 -8
  190. tomwer/gui/stitching/config/positionoveraxis.py +22 -23
  191. tomwer/gui/stitching/normalization.py +117 -0
  192. tomwer/gui/stitching/stitchandbackground.py +4 -6
  193. tomwer/gui/stitching/stitching.py +265 -43
  194. tomwer/gui/stitching/stitching_preview.py +62 -5
  195. tomwer/gui/stitching/stitching_raw.py +2 -5
  196. tomwer/gui/stitching/z_stitching/fineestimation.py +0 -60
  197. tomwer/gui/utils/buttons.py +112 -29
  198. tomwer/gui/utils/inputwidget.py +33 -25
  199. tomwer/gui/utils/scandescription.py +4 -0
  200. tomwer/gui/utils/step.py +144 -0
  201. tomwer/gui/utils/unitsystem.py +2 -5
  202. tomwer/gui/utils/vignettes.py +176 -15
  203. tomwer/gui/visualization/dataviewer.py +1 -18
  204. tomwer/gui/visualization/diffviewer/diffviewer.py +7 -16
  205. tomwer/gui/visualization/diffviewer/shiftwidget.py +2 -5
  206. tomwer/gui/visualization/scanoverview.py +1 -1
  207. tomwer/gui/visualization/sinogramviewer.py +1 -10
  208. tomwer/gui/visualization/test/test_diffviewer.py +3 -3
  209. tomwer/gui/visualization/test/test_nx_tomo_metadata_viewer.py +4 -4
  210. tomwer/gui/visualization/test/test_sinogramviewer.py +2 -2
  211. tomwer/gui/visualization/test/test_stacks.py +3 -3
  212. tomwer/gui/visualization/test/test_volumeviewer.py +2 -2
  213. tomwer/io/utils/raw_and_processed_data.py +84 -0
  214. tomwer/io/utils/tomoobj.py +4 -6
  215. tomwer/resources/gui/icons/ruler.png +0 -0
  216. tomwer/resources/gui/icons/ruler.svg +273 -0
  217. tomwer/resources/gui/icons/short_description.png +0 -0
  218. tomwer/resources/gui/icons/short_description.svg +58 -0
  219. tomwer/resources/gui/icons/url.png +0 -0
  220. tomwer/resources/gui/icons/url.svg +58 -0
  221. tomwer/synctools/stacks/edit/darkflatpatch.py +2 -2
  222. tomwer/synctools/stacks/edit/imagekeyeditor.py +2 -2
  223. tomwer/synctools/stacks/reconstruction/axis.py +4 -4
  224. tomwer/synctools/stacks/reconstruction/castvolume.py +2 -2
  225. tomwer/synctools/stacks/reconstruction/dkrefcopy.py +4 -10
  226. tomwer/synctools/stacks/reconstruction/nabu.py +2 -2
  227. tomwer/synctools/stacks/reconstruction/normalization.py +2 -2
  228. tomwer/synctools/stacks/reconstruction/saaxis.py +2 -2
  229. tomwer/synctools/stacks/reconstruction/sadeltabeta.py +2 -2
  230. tomwer/synctools/test/test_darkRefs.py +7 -58
  231. tomwer/synctools/test/test_foldertransfer.py +6 -6
  232. tomwer/synctools/utils/scanstages.py +6 -6
  233. tomwer/tests/conftest.py +34 -0
  234. tomwer/tests/datasets.py +13 -0
  235. tomwer/tests/test_scripts.py +92 -39
  236. tomwer/tests/utils.py +5 -0
  237. tomwer/version.py +3 -3
  238. {tomwer-1.2.8.dist-info → tomwer-1.3.0a0.dist-info}/METADATA +39 -44
  239. {tomwer-1.2.8.dist-info → tomwer-1.3.0a0.dist-info}/RECORD +248 -209
  240. tomwer/resources/gui/icons/esrf_1.svg +0 -307
  241. tomwer/resources/gui/icons/triangle.svg +0 -80
  242. tomwer/synctools/test/test_scanstages.py +0 -162
  243. tomwer/tests/utils/__init__.py +0 -247
  244. tomwer/tests/utils/utilstest.py +0 -220
  245. /tomwer/app/{saaxis.py → multicor.py} +0 -0
  246. /tomwer/app/{sadeltabeta.py → multipag.py} +0 -0
  247. /tomwer/core/process/control/{email.py → emailnotifier.py} +0 -0
  248. /tomwer-1.2.8-py3.11-nspkg.pth → /tomwer-1.3.0a0-py3.11-nspkg.pth +0 -0
  249. {tomwer-1.2.8.dist-info → tomwer-1.3.0a0.dist-info}/LICENSE +0 -0
  250. {tomwer-1.2.8.dist-info → tomwer-1.3.0a0.dist-info}/WHEEL +0 -0
  251. {tomwer-1.2.8.dist-info → tomwer-1.3.0a0.dist-info}/entry_points.txt +0 -0
  252. {tomwer-1.2.8.dist-info → tomwer-1.3.0a0.dist-info}/namespace_packages.txt +0 -0
  253. {tomwer-1.2.8.dist-info → tomwer-1.3.0a0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,263 @@
1
+ import fileinput
2
+ import logging
3
+ import os
4
+
5
+ import fabio.edfimage
6
+ from lxml import etree
7
+ from pyunitsystem import metricsystem
8
+
9
+
10
+ _logger = logging.getLogger(__name__)
11
+
12
+
13
+ def _getInformation(scan, refFile, information, _type, aliases=None):
14
+ """
15
+ Parse files contained in the given directory to get the requested
16
+ information
17
+
18
+ :param scan: directory containing the acquisition. Must be an absolute path
19
+ :param refFile: the refXXXX_YYYY which should contain information about the
20
+ scan.
21
+ :return: the requested information or None if not found
22
+ """
23
+
24
+ def parseRefFile(filePath):
25
+ header = fabio.open(filePath).header
26
+ for k in aliases:
27
+ if k in header:
28
+ return _type(header[k])
29
+ return None
30
+
31
+ def parseXMLFile(filePath):
32
+ try:
33
+ for alias in info_aliases:
34
+ tree = etree.parse(filePath)
35
+ elmt = tree.find("acquisition/" + alias)
36
+ if elmt is None:
37
+ continue
38
+ else:
39
+ info = _type(elmt.text)
40
+ if info == -1:
41
+ return None
42
+ else:
43
+ return info
44
+ except etree.XMLSyntaxError as e:
45
+ _logger.warning(e)
46
+ return None
47
+
48
+ def parseInfoFile(filePath):
49
+ def extractInformation(text, alias):
50
+ text = text.replace(alias, "")
51
+ text = text.replace("\n", "")
52
+ text = text.replace(" ", "")
53
+ text = text.replace("=", "")
54
+ return _type(text)
55
+
56
+ info = None
57
+ f = open(filePath, "r")
58
+ line = f.readline()
59
+ while line:
60
+ for alias in info_aliases:
61
+ if alias in line:
62
+ info = extractInformation(line, alias)
63
+ break
64
+ line = f.readline()
65
+ f.close()
66
+ return info
67
+
68
+ info_aliases = [information]
69
+ if aliases is not None:
70
+ assert type(aliases) in (tuple, list)
71
+ [info_aliases.append(alias) for alias in aliases]
72
+
73
+ if not os.path.isdir(scan):
74
+ return None
75
+
76
+ if refFile is not None and os.path.isfile(refFile):
77
+ try:
78
+ info = parseRefFile(refFile)
79
+ except IOError as e:
80
+ _logger.warning(e)
81
+ else:
82
+ if info is not None:
83
+ return info
84
+
85
+ baseName = os.path.basename(scan)
86
+ infoFiles = [os.path.join(scan, baseName + ".info")]
87
+ infoOnDataVisitor = infoFiles[0].replace("lbsram", "", 1)
88
+ # hack to check in lbsram, would need to be removed to add some consistency
89
+ if os.path.isfile(infoOnDataVisitor):
90
+ infoFiles.append(infoOnDataVisitor)
91
+ for infoFile in infoFiles:
92
+ if os.path.isfile(infoFile) is True:
93
+ info = parseInfoFile(infoFile)
94
+ if info is not None:
95
+ return info
96
+
97
+ xmlFiles = [os.path.join(scan, baseName + ".xml")]
98
+ xmlOnDataVisitor = xmlFiles[0].replace("lbsram", "", 1)
99
+ # hack to check in lbsram, would need to be removed to add some consistency
100
+ if os.path.isfile(xmlOnDataVisitor):
101
+ xmlFiles.append(xmlOnDataVisitor)
102
+ for xmlFile in xmlFiles:
103
+ if os.path.isfile(xmlFile) is True:
104
+ info = parseXMLFile(xmlFile)
105
+ if info is not None:
106
+ return info
107
+
108
+ return None
109
+
110
+
111
+ def getClosestEnergy(scan, refFile=None):
112
+ """
113
+ Parse files contained in the given directory to get information about the
114
+ incoming energy for the serie `iSerie`
115
+
116
+ :param scan: directory containing the acquisition
117
+ :param refFile: the refXXXX_YYYY which should contain information about the
118
+ energy.
119
+ :return: the energy in keV or none if no energy found
120
+ """
121
+ return _getInformation(
122
+ os.path.abspath(scan),
123
+ refFile,
124
+ information="Energy",
125
+ aliases=["energy", "ENERGY"],
126
+ _type=float,
127
+ )
128
+
129
+
130
+ def getTomo_N(scan):
131
+ """Return the number of radio taken"""
132
+ return _getInformation(
133
+ os.path.abspath(scan),
134
+ refFile=None,
135
+ information="TOMO_N",
136
+ _type=int,
137
+ aliases=["tomo_N", "Tomo_N"],
138
+ )
139
+
140
+
141
+ def getDARK_N(scan):
142
+ return _getInformation(
143
+ os.path.abspath(scan),
144
+ refFile=None,
145
+ information="DARK_N",
146
+ _type=int,
147
+ aliases=["dark_N"],
148
+ )
149
+
150
+
151
+ def rebaseParFile(_file, oldfolder, newfolder):
152
+ """Update the given .par file to replace oldfolder location by the newfolder.
153
+
154
+ .. warning:: make the replacement in place.
155
+
156
+ :param _file: par file to update
157
+ :param oldfolder: previous location of the .par file
158
+ :param newfolder: new location of the .par file
159
+ """
160
+ with fileinput.FileInput(_file, inplace=True, backup=".bak") as parfile:
161
+ for line in parfile:
162
+ line = line.rstrip().replace(oldfolder, newfolder, 1)
163
+ print(line)
164
+
165
+
166
+ def getDim1Dim2(scan):
167
+ """
168
+
169
+ :param scan: path to the acquisition
170
+ :return: detector definition
171
+ :rtype: tuple of int
172
+ """
173
+ d1 = _getInformation(
174
+ scan=scan,
175
+ refFile=None,
176
+ information="Dim_1",
177
+ aliases=["projectionSize/DIM_1"],
178
+ _type=int,
179
+ )
180
+ d2 = _getInformation(
181
+ scan=scan,
182
+ refFile=None,
183
+ information="Dim_2",
184
+ aliases=["projectionSize/DIM_2"],
185
+ _type=int,
186
+ )
187
+ return d1, d2
188
+
189
+
190
+ def getParametersFromParOrInfo(_file):
191
+ """
192
+ Create a dictionary from the file with the information name as keys and
193
+ their values as values
194
+ """
195
+ assert os.path.exists(_file) and os.path.isfile(_file)
196
+ ddict = {}
197
+ f = open(_file, "r")
198
+ lines = f.readlines()
199
+ for line in lines:
200
+ if "=" not in line:
201
+ continue
202
+ line_str = line.replace(" ", "")
203
+ line_str = line_str.rstrip("\n")
204
+ # remove on the line comments
205
+ if "#" in line_str:
206
+ line_str = line_str.split("#")[0]
207
+ if line_str == "":
208
+ continue
209
+ try:
210
+ key, value = line_str.split("=")
211
+ except ValueError:
212
+ _logger.error('fail to extract information from "%s"' % line_str)
213
+ else:
214
+ ddict[key.lower()] = value
215
+ return ddict
216
+
217
+
218
+ def getFirstProjFile(scan):
219
+ """Return the first .edf containing a projection"""
220
+ if os.path.isdir(scan) is False:
221
+ return None
222
+ files = sorted(os.listdir(scan))
223
+
224
+ while (
225
+ len(files) > 0
226
+ and (files[0].startswith(os.path.basename(scan)) and files[0].endswith(".edf"))
227
+ is False
228
+ ):
229
+ files.remove(files[0])
230
+
231
+ if len(files) > 0:
232
+ return os.path.join(scan, files[0])
233
+ else:
234
+ return None
235
+
236
+
237
+ def getPixelSize(scan):
238
+ """
239
+ Try to retrieve the pixel size from the set of files.
240
+
241
+ :return: the pixel size in meter or None
242
+ :rtype: None or float
243
+ """
244
+ if os.path.isdir(scan) is False:
245
+ return None
246
+ value = _getInformation(
247
+ scan=scan,
248
+ refFile=None,
249
+ information="PixelSize",
250
+ _type=float,
251
+ aliases=["pixelSize"],
252
+ )
253
+ if value is None:
254
+ parFile = os.path.join(scan, os.path.basename(scan) + ".par")
255
+ if os.path.exists(parFile):
256
+ ddict = getParametersFromParOrInfo(parFile)
257
+ if "IMAGE_PIXEL_SIZE_1".lower() in ddict:
258
+ value = float(ddict["IMAGE_PIXEL_SIZE_1".lower()])
259
+ # for now pixel size are stored in microns. We want to return them in meter
260
+ if value is not None:
261
+ return value * metricsystem.micrometer.value
262
+ else:
263
+ return None
@@ -38,7 +38,7 @@ from tomoscan.factory import Factory as _oVolumeFactory
38
38
  from tomoscan.identifier import BaseIdentifier, ScanIdentifier, VolumeIdentifier
39
39
 
40
40
  from tomwer.core.scan.edfscan import EDFTomoScan, EDFTomoScanIdentifier
41
- from tomwer.core.scan.hdf5scan import HDF5TomoScan
41
+ from tomwer.core.scan.nxtomoscan import NXtomoScan
42
42
  from tomwer.core.volume import (
43
43
  EDFVolume,
44
44
  HDF5Volume,
@@ -156,7 +156,7 @@ class VolumeFactory(_oVolumeFactory):
156
156
  if tomo_type == VolumeIdentifier.TOMO_TYPE:
157
157
  return HDF5Volume.from_identifier(identifier=identifier)
158
158
  elif tomo_type == ScanIdentifier.TOMO_TYPE:
159
- return HDF5TomoScan.from_identifier(identifier=identifier)
159
+ return NXtomoScan.from_identifier(identifier=identifier)
160
160
  else:
161
161
  raise NotImplementedError()
162
162
  elif scheme == "jp2k":