mosamatic2 2.0.8__tar.gz → 2.0.9__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of mosamatic2 might be problematic. Click here for more details.

Files changed (92) hide show
  1. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/PKG-INFO +2 -1
  2. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/pyproject.toml +2 -1
  3. mosamatic2-2.0.9/src/mosamatic2/core/data/dicomimage.py +27 -0
  4. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/pipelines/defaultpipeline/defaultpipeline.py +4 -0
  5. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/tasks/createdicomsummarytask/createdicomsummarytask.py +3 -2
  6. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/utils.py +22 -3
  7. mosamatic2-2.0.9/src/mosamatic2/ui/resources/VERSION +1 -0
  8. mosamatic2-2.0.8/src/mosamatic2/core/data/dicomimage.py +0 -18
  9. mosamatic2-2.0.8/src/mosamatic2/ui/resources/VERSION +0 -1
  10. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/README.md +0 -0
  11. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/models.py +0 -0
  12. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/__init__.py +0 -0
  13. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/app.py +0 -0
  14. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/cli.py +0 -0
  15. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/commands/__init__.py +0 -0
  16. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/commands/calculatescores.py +0 -0
  17. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/commands/createdicomsummary.py +0 -0
  18. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/commands/createpngsfromsegmentations.py +0 -0
  19. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/commands/dicom2nifti.py +0 -0
  20. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/commands/rescaledicomimages.py +0 -0
  21. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/commands/segmentmusclefatl3tensorflow.py +0 -0
  22. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/commands/selectslicefromscans.py +0 -0
  23. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/constants.py +0 -0
  24. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/__init__.py +0 -0
  25. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/data/__init__.py +0 -0
  26. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/data/dicomimageseries.py +0 -0
  27. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/data/dixonseries.py +0 -0
  28. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/data/filedata.py +0 -0
  29. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/data/multidicomimage.py +0 -0
  30. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/data/multinumpyimage.py +0 -0
  31. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/data/numpyimage.py +0 -0
  32. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/managers/__init__.py +0 -0
  33. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/managers/logmanager.py +0 -0
  34. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/managers/logmanagerlistener.py +0 -0
  35. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/pipelines/__init__.py +0 -0
  36. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/pipelines/defaultpipeline/__init__.py +0 -0
  37. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/pipelines/pipeline.py +0 -0
  38. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/singleton.py +0 -0
  39. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/tasks/__init__.py +0 -0
  40. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/tasks/calculatescorestask/__init__.py +0 -0
  41. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/tasks/calculatescorestask/calculatescorestask.py +0 -0
  42. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/tasks/createdicomsummarytask/__init__.py +0 -0
  43. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/tasks/createpngsfromsegmentationstask/__init__.py +0 -0
  44. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/tasks/createpngsfromsegmentationstask/createpngsfromsegmentationstask.py +0 -0
  45. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/tasks/dicom2niftitask/__init__.py +0 -0
  46. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/tasks/dicom2niftitask/dicom2niftitask.py +0 -0
  47. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/tasks/rescaledicomimagestask/__init__.py +0 -0
  48. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/tasks/rescaledicomimagestask/rescaledicomimagestask.py +0 -0
  49. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/tasks/segmentmusclefatl3tensorflowtask/__init__.py +0 -0
  50. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/tasks/segmentmusclefatl3tensorflowtask/paramloader.py +0 -0
  51. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/tasks/segmentmusclefatl3tensorflowtask/segmentmusclefatl3tensorflowtask.py +0 -0
  52. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/tasks/selectslicefromscanstask/__init__.py +0 -0
  53. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/tasks/selectslicefromscanstask/selectslicefromscanstask.py +0 -0
  54. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/core/tasks/task.py +0 -0
  55. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/server.py +0 -0
  56. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/__init__.py +0 -0
  57. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/mainwindow.py +0 -0
  58. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/resources/icons/mosamatic2.icns +0 -0
  59. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/resources/icons/mosamatic2.ico +0 -0
  60. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/resources/icons/spinner.gif +0 -0
  61. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/resources/images/body-composition.jpg +0 -0
  62. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/settings.py +0 -0
  63. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/utils.py +0 -0
  64. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/widgets/__init__.py +0 -0
  65. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/widgets/dialogs/__init__.py +0 -0
  66. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/widgets/dialogs/dialog.py +0 -0
  67. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/widgets/dialogs/helpdialog.py +0 -0
  68. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/widgets/panels/__init__.py +0 -0
  69. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/widgets/panels/defaultpanel.py +0 -0
  70. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/widgets/panels/logpanel.py +0 -0
  71. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/widgets/panels/mainpanel.py +0 -0
  72. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/widgets/panels/pipelines/__init__.py +0 -0
  73. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/widgets/panels/pipelines/defaultpipelinepanel.py +0 -0
  74. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/widgets/panels/pipelines/pipelinepanel.py +0 -0
  75. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/widgets/panels/stackedpanel.py +0 -0
  76. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/widgets/panels/tasks/__init__.py +0 -0
  77. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/widgets/panels/tasks/calculatescorestaskpanel.py +0 -0
  78. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/widgets/panels/tasks/createdicomsummarytaskpanel.py +0 -0
  79. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/widgets/panels/tasks/createpngsfromsegmentationstaskpanel.py +0 -0
  80. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/widgets/panels/tasks/dicom2niftitaskpanel.py +0 -0
  81. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/widgets/panels/tasks/rescaledicomimagestaskpanel.py +0 -0
  82. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/widgets/panels/tasks/segmentmusclefatl3tensorflowtaskpanel.py +0 -0
  83. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/widgets/panels/tasks/selectslicefromscanstaskpanel.py +0 -0
  84. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/widgets/panels/tasks/taskpanel.py +0 -0
  85. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/widgets/panels/visualizations/__init__.py +0 -0
  86. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/widgets/panels/visualizations/slicevisualization/__init__.py +0 -0
  87. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/widgets/panels/visualizations/slicevisualization/custominteractorstyle.py +0 -0
  88. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/widgets/panels/visualizations/slicevisualization/sliceviewer.py +0 -0
  89. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/widgets/panels/visualizations/slicevisualization/slicevisualization.py +0 -0
  90. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/widgets/panels/visualizations/visualization.py +0 -0
  91. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/widgets/splashscreen.py +0 -0
  92. {mosamatic2-2.0.8 → mosamatic2-2.0.9}/src/mosamatic2/ui/worker.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: mosamatic2
3
- Version: 2.0.8
3
+ Version: 2.0.9
4
4
  Summary:
5
5
  Author: Ralph Brecheisen
6
6
  Author-email: r.brecheisen@maastrichtuniversity.nl
@@ -10,6 +10,7 @@ Classifier: Programming Language :: Python :: 3.11
10
10
  Requires-Dist: antspyx (>=0.5.4)
11
11
  Requires-Dist: dicom2nifti (>=2.6.2)
12
12
  Requires-Dist: flask (>=3.1.2)
13
+ Requires-Dist: moosez
13
14
  Requires-Dist: nibabel (>=5.3.2)
14
15
  Requires-Dist: numpy (>=1.26.4)
15
16
  Requires-Dist: openpyxl (>=3.1.5)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mosamatic2"
3
- version = "2.0.8"
3
+ version = "2.0.9"
4
4
  description = ""
5
5
  authors = [
6
6
  {name = "Ralph Brecheisen", email = "r.brecheisen@maastrichtuniversity.nl"}
@@ -33,6 +33,7 @@ dependencies = [
33
33
  "antspyx>=0.5.4",
34
34
  "vtk>=9.5.1",
35
35
  "pyqtgraph>=0.13.7",
36
+ "moosez",
36
37
  ]
37
38
 
38
39
  [tool.poetry]
@@ -0,0 +1,27 @@
1
+ from mosamatic2.core.data.filedata import FileData
2
+ from mosamatic2.core.utils import (
3
+ is_dicom,
4
+ load_dicom,
5
+ is_jpeg2000_compressed,
6
+ )
7
+ from mosamatic2.core.managers.logmanager import LogManager
8
+
9
+ LOG = LogManager()
10
+
11
+
12
+ class DicomImage(FileData):
13
+ def load(self):
14
+ if self.path():
15
+ p = load_dicom(self.path())
16
+ if p:
17
+ if is_jpeg2000_compressed(p):
18
+ p.decompress()
19
+ self.set_object(p)
20
+ return True
21
+ # if is_dicom(self.path()):
22
+ # p = load_dicom(self.path())
23
+ # if is_jpeg2000_compressed(p):
24
+ # p.decompress()
25
+ # self.set_object(p)
26
+ # return True
27
+ return False
@@ -8,6 +8,9 @@ from mosamatic2.core.tasks import (
8
8
  CreatePngsFromSegmentationsTask,
9
9
  CalculateScoresTask,
10
10
  )
11
+ from mosamatic2.core.managers.logmanager import LogManager
12
+
13
+ LOG = LogManager()
11
14
 
12
15
 
13
16
  class DefaultPipeline(Pipeline):
@@ -25,6 +28,7 @@ class DefaultPipeline(Pipeline):
25
28
  ]
26
29
  def __init__(self, inputs, params, output, overwrite):
27
30
  super(DefaultPipeline, self).__init__(inputs, params, output, overwrite)
31
+ LOG.info('Found {} images to process'.format(len(os.listdir(self.input('images')))))
28
32
  model_type = self.param('model_type')
29
33
  # segmentation_task_class = SegmentMuscleFatL3Task if model_type == 'pytorch' else SegmentMuscleFatL3TensorFlowTask
30
34
  segmentation_task_class = SegmentMuscleFatL3TensorFlowTask
@@ -25,8 +25,9 @@ class CreateDicomSummaryTask(Task):
25
25
  for root, dirs, files in os.walk(patient_dir_path):
26
26
  for f in files:
27
27
  f_path = os.path.join(root, f)
28
- if is_dicom(f_path):
29
- p = load_dicom(f_path, stop_before_pixels=True)
28
+ # if is_dicom(f_path):
29
+ p = load_dicom(f_path, stop_before_pixels=True)
30
+ if p:
30
31
  series_instance_uid = p.SeriesInstanceUID
31
32
  if not series_instance_uid in data[patient_dir_name].keys():
32
33
  data[patient_dir_name][series_instance_uid] = []
@@ -14,10 +14,12 @@ from pydicom.uid import (
14
14
  ExplicitVRLittleEndian, ImplicitVRLittleEndian, ExplicitVRBigEndian
15
15
  )
16
16
  from PIL import Image
17
+ from mosamatic2.core.managers.logmanager import LogManager
17
18
 
18
19
  warnings.filterwarnings("ignore", message="Invalid value for VR UI:", category=UserWarning)
19
20
 
20
21
  MUSCLE, VAT, SAT = 1, 5, 7
22
+ LOG = LogManager()
21
23
 
22
24
 
23
25
  def create_name_with_timestamp(prefix: str='') -> str:
@@ -102,17 +104,34 @@ def is_dicom(f):
102
104
  pydicom.dcmread(f, stop_before_pixels=True)
103
105
  return True
104
106
  except pydicom.errors.InvalidDicomError:
105
- return False
107
+ try:
108
+ pydicom.dcmread(f, stop_before_pixels=True, force=True)
109
+ return True
110
+ except pydicom.errors.InvalidDicomError:
111
+ pass
112
+ return False
106
113
 
107
114
 
108
115
  def load_dicom(f, stop_before_pixels=False):
109
- if is_dicom(f):
116
+ try:
110
117
  return pydicom.dcmread(f, stop_before_pixels=stop_before_pixels)
118
+ except pydicom.errors.InvalidDicomError:
119
+ try:
120
+ p = pydicom.dcmread(f, stop_before_pixels=stop_before_pixels, force=True)
121
+ if hasattr(p, 'SOPClassUID'):
122
+ if not hasattr(p.file_meta, 'TransferSyntaxUID'):
123
+ LOG.warning(f'DICOM file {f} does not have FileMetaData/TransferSyntaxUID, trying to fix...')
124
+ p.file_meta.TransferSyntaxUID = pydicom.uid.ImplicitVRLittleEndian
125
+ return p
126
+ except pydicom.errors.InvalidDicomError:
127
+ pass
111
128
  return None
112
129
 
113
130
 
114
131
  def is_jpeg2000_compressed(p):
115
- return p.file_meta.TransferSyntaxUID not in [ExplicitVRLittleEndian, ImplicitVRLittleEndian, ExplicitVRBigEndian]
132
+ if hasattr(p.file_meta, 'TransferSyntaxUID'):
133
+ return p.file_meta.TransferSyntaxUID not in [ExplicitVRLittleEndian, ImplicitVRLittleEndian, ExplicitVRBigEndian]
134
+ return False
116
135
 
117
136
 
118
137
  def is_numpy_array(value):
@@ -1,18 +0,0 @@
1
- from mosamatic2.core.data.filedata import FileData
2
- from mosamatic2.core.utils import (
3
- is_dicom,
4
- load_dicom,
5
- is_jpeg2000_compressed,
6
- )
7
-
8
-
9
- class DicomImage(FileData):
10
- def load(self):
11
- if self.path():
12
- if is_dicom(self.path()):
13
- p = load_dicom(self.path())
14
- if is_jpeg2000_compressed(p):
15
- p.decompress()
16
- self.set_object(p)
17
- return True
18
- return False
@@ -1 +0,0 @@
1
- 2.0.8
File without changes
File without changes