mosamatic2 2.0.8__py3-none-any.whl → 2.0.10__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 mosamatic2 might be problematic. Click here for more details.
- mosamatic2/cli.py +2 -0
- mosamatic2/commands/defaultpipeline.py +70 -0
- mosamatic2/core/data/dicomimage.py +11 -2
- mosamatic2/core/pipelines/defaultpipeline/defaultpipeline.py +4 -0
- mosamatic2/core/tasks/createdicomsummarytask/createdicomsummarytask.py +3 -2
- mosamatic2/core/tasks/selectslicefromscanstask/selectslicefromscanstask.py +6 -1
- mosamatic2/core/utils.py +22 -3
- mosamatic2/ui/resources/VERSION +1 -1
- {mosamatic2-2.0.8.dist-info → mosamatic2-2.0.10.dist-info}/METADATA +4 -3
- {mosamatic2-2.0.8.dist-info → mosamatic2-2.0.10.dist-info}/RECORD +12 -11
- {mosamatic2-2.0.8.dist-info → mosamatic2-2.0.10.dist-info}/WHEEL +0 -0
- {mosamatic2-2.0.8.dist-info → mosamatic2-2.0.10.dist-info}/entry_points.txt +0 -0
mosamatic2/cli.py
CHANGED
|
@@ -7,6 +7,7 @@ from mosamatic2.commands import (
|
|
|
7
7
|
dicom2nifti,
|
|
8
8
|
selectslicefromscans,
|
|
9
9
|
createdicomsummary,
|
|
10
|
+
defaultpipeline,
|
|
10
11
|
)
|
|
11
12
|
from mosamatic2.core.utils import show_doc_command
|
|
12
13
|
|
|
@@ -35,4 +36,5 @@ main.add_command(createpngsfromsegmentations.createpngsfromsegmentations)
|
|
|
35
36
|
main.add_command(dicom2nifti.dicom2nifti)
|
|
36
37
|
main.add_command(selectslicefromscans.selectslicefromscans)
|
|
37
38
|
main.add_command(createdicomsummary.createdicomsummary)
|
|
39
|
+
main.add_command(defaultpipeline.defaultpipeline)
|
|
38
40
|
main.add_command(show_doc_command(main)) # Special command to show long description for command
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import click
|
|
2
|
+
|
|
3
|
+
from mosamatic2.core.pipelines import DefaultPipeline
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
@click.command(help='Runs default L3 analysis pipeline')
|
|
7
|
+
@click.option(
|
|
8
|
+
'--images',
|
|
9
|
+
required=True,
|
|
10
|
+
type=click.Path(exists=True),
|
|
11
|
+
help='Directory with L3 images',
|
|
12
|
+
)
|
|
13
|
+
@click.option(
|
|
14
|
+
'--model_files',
|
|
15
|
+
required=True,
|
|
16
|
+
type=click.Path(),
|
|
17
|
+
help='Input directory with AI model files'
|
|
18
|
+
)
|
|
19
|
+
@click.option(
|
|
20
|
+
'--output',
|
|
21
|
+
required=True,
|
|
22
|
+
type=click.Path(),
|
|
23
|
+
help='Output directory'
|
|
24
|
+
)
|
|
25
|
+
@click.option(
|
|
26
|
+
'--overwrite',
|
|
27
|
+
type=click.BOOL,
|
|
28
|
+
default=False,
|
|
29
|
+
help='Overwrite [true|false]'
|
|
30
|
+
)
|
|
31
|
+
def defaultpipeline(images, model_files, output, overwrite):
|
|
32
|
+
"""
|
|
33
|
+
Runs default L3 analysis pipeline
|
|
34
|
+
|
|
35
|
+
Parameters
|
|
36
|
+
----------
|
|
37
|
+
--images : str
|
|
38
|
+
Directory with L3 images
|
|
39
|
+
|
|
40
|
+
--model_files : str
|
|
41
|
+
Directory with AI model files. This directory can ONLY contain the following
|
|
42
|
+
files:
|
|
43
|
+
|
|
44
|
+
(1) contour_model-1.0.zip
|
|
45
|
+
(2) model-1.0.zip
|
|
46
|
+
(3) params-1.0.json
|
|
47
|
+
|
|
48
|
+
These files can be downloaded from:
|
|
49
|
+
https://mosamatic.rbeesoft.nl/wordpress/mosamatic/installation/
|
|
50
|
+
|
|
51
|
+
--output : str
|
|
52
|
+
Path to output directory
|
|
53
|
+
|
|
54
|
+
--overwrite : bool
|
|
55
|
+
Overwrite contents output directory [true|false]
|
|
56
|
+
"""
|
|
57
|
+
pipeline = DefaultPipeline(
|
|
58
|
+
inputs={'images': images, 'model_files': model_files},
|
|
59
|
+
params={
|
|
60
|
+
'target_size': 512,
|
|
61
|
+
'model_type': 'tensorflow',
|
|
62
|
+
'model_version': 1.0,
|
|
63
|
+
'file_type': 'npy',
|
|
64
|
+
'fig_width': 10,
|
|
65
|
+
'fig_height': 10,
|
|
66
|
+
},
|
|
67
|
+
output=output,
|
|
68
|
+
overwrite=overwrite,
|
|
69
|
+
)
|
|
70
|
+
pipeline.run()
|
|
@@ -4,15 +4,24 @@ from mosamatic2.core.utils import (
|
|
|
4
4
|
load_dicom,
|
|
5
5
|
is_jpeg2000_compressed,
|
|
6
6
|
)
|
|
7
|
+
from mosamatic2.core.managers.logmanager import LogManager
|
|
8
|
+
|
|
9
|
+
LOG = LogManager()
|
|
7
10
|
|
|
8
11
|
|
|
9
12
|
class DicomImage(FileData):
|
|
10
13
|
def load(self):
|
|
11
14
|
if self.path():
|
|
12
|
-
|
|
13
|
-
|
|
15
|
+
p = load_dicom(self.path())
|
|
16
|
+
if p:
|
|
14
17
|
if is_jpeg2000_compressed(p):
|
|
15
18
|
p.decompress()
|
|
16
19
|
self.set_object(p)
|
|
17
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
|
|
18
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
|
-
|
|
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] = []
|
|
@@ -97,7 +97,12 @@ class SelectSliceFromScansTask(Task):
|
|
|
97
97
|
for step in range(nr_steps):
|
|
98
98
|
scan_dir = scan_dirs[step]
|
|
99
99
|
scan_name = os.path.split(scan_dir)[1]
|
|
100
|
-
|
|
100
|
+
try:
|
|
101
|
+
self.extract_masks(scan_dir)
|
|
102
|
+
except Exception as e:
|
|
103
|
+
LOG.warning(f'Could not extract masks from {scan_dir} [{str(e)}]')
|
|
104
|
+
self.set_progress(step, nr_steps)
|
|
105
|
+
continue
|
|
101
106
|
file_path = self.find_slice(scan_dir, vertebra)
|
|
102
107
|
if file_path is not None:
|
|
103
108
|
extension = '' if file_path.endswith('.dcm') else '.dcm'
|
mosamatic2/core/utils.py
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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):
|
mosamatic2/ui/resources/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.0.
|
|
1
|
+
2.0.10
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: mosamatic2
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.10
|
|
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)
|
|
@@ -28,8 +29,8 @@ Requires-Dist: tensorflow-intel (==2.15.0) ; platform_system == "Windows"
|
|
|
28
29
|
Requires-Dist: tensorflow-io-gcs-filesystem (==0.31.0) ; platform_system == "Windows"
|
|
29
30
|
Requires-Dist: tensorflow-io-gcs-filesystem (>=0.31.0) ; platform_system == "Darwin" and platform_machine == "arm64"
|
|
30
31
|
Requires-Dist: tensorflow-macos (==2.15.0) ; platform_system == "Darwin" and platform_machine == "arm64"
|
|
31
|
-
Requires-Dist: torch (
|
|
32
|
-
Requires-Dist: torchvision (>=0.
|
|
32
|
+
Requires-Dist: torch (==2.5.1)
|
|
33
|
+
Requires-Dist: torchvision (>=0.20.1)
|
|
33
34
|
Requires-Dist: totalsegmentator (>=2.11.0)
|
|
34
35
|
Requires-Dist: vtk (>=9.5.1)
|
|
35
36
|
Description-Content-Type: text/markdown
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
models.py,sha256=Kx6oWKt7IpTTxrhBDrX61X-ZX12J7yPkJFuhVDsDHoQ,8807
|
|
2
2
|
mosamatic2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
3
|
mosamatic2/app.py,sha256=RIUa5tvMYFcmEII4xZPLZZdx9dXWqBvwkxkl_R97Jkw,860
|
|
4
|
-
mosamatic2/cli.py,sha256=
|
|
4
|
+
mosamatic2/cli.py,sha256=EhGBs8AZjgZBBDFkWBNRuKd9o37Zo116DlKHHFBhoBo,1444
|
|
5
5
|
mosamatic2/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
6
|
mosamatic2/commands/calculatescores.py,sha256=Lb8Q8L2yq7Tt6VBJ6_lltRuldrev_pac6fcgF-xzZyE,1984
|
|
7
7
|
mosamatic2/commands/createdicomsummary.py,sha256=qbVgWGIJPBL8vTBcAxfThloQ_q15OfQy5ohMprzZL4E,1955
|
|
8
8
|
mosamatic2/commands/createpngsfromsegmentations.py,sha256=uUAQJVTqOkBCfENzi21RBNYvf6_nuesx1MeR3j_-7dM,1682
|
|
9
|
+
mosamatic2/commands/defaultpipeline.py,sha256=-kQRSXbEDimAdy_kT1qMxRlZWUoXdu3PkWf70PCIS5Y,1734
|
|
9
10
|
mosamatic2/commands/dicom2nifti.py,sha256=4hMvglxdOid7p7P_Jc-Tudsf93JRMlYaQsEQctLq2d4,1015
|
|
10
11
|
mosamatic2/commands/rescaledicomimages.py,sha256=25QdCzB5s0sRwkTb3o5zco2bIwy6LttNf7i97kGBDYQ,1280
|
|
11
12
|
mosamatic2/commands/segmentmusclefatl3tensorflow.py,sha256=CdScmA_EQicaN4GY5bBUOYwfhDPqy9om2sxY3WrtmM0,1424
|
|
@@ -13,7 +14,7 @@ mosamatic2/commands/selectslicefromscans.py,sha256=3398PM2uBcxF6wpb0-c-Itp_qxoAx
|
|
|
13
14
|
mosamatic2/constants.py,sha256=MVYMwO-x2jQSN37o3zNkRseVQ1nYRA3mLv3v_Q0Mlds,1284
|
|
14
15
|
mosamatic2/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
16
|
mosamatic2/core/data/__init__.py,sha256=j9iGqUTJlGF0N0gPrzzpe_Dhv0Bj9c6FdQ1g7U-_j2g,298
|
|
16
|
-
mosamatic2/core/data/dicomimage.py,sha256=
|
|
17
|
+
mosamatic2/core/data/dicomimage.py,sha256=e4n-xw5FP_bmvjgPUSg_wPDkByYscaEm3TWAzjd935Y,786
|
|
17
18
|
mosamatic2/core/data/dicomimageseries.py,sha256=OZkNi15crL8nEA-PGYsM0k9NMi2mMHRvDRePr_-czvA,849
|
|
18
19
|
mosamatic2/core/data/dixonseries.py,sha256=kq9fy65MSM2XwiScqp7b3rQ09JmpyGwbG6ldZsuPRrM,516
|
|
19
20
|
mosamatic2/core/data/filedata.py,sha256=hCnpizGqOpxzIADJkDS2_NSmKVLL1u49TYjSJE5UXQo,515
|
|
@@ -25,14 +26,14 @@ mosamatic2/core/managers/logmanager.py,sha256=NEaXvhl0aILjBbK710GaWanVuuNvB51HpH
|
|
|
25
26
|
mosamatic2/core/managers/logmanagerlistener.py,sha256=Gaig07yjBnyQq9I8sN85olTEeDCDyCFQnEJdwzvmgvc,99
|
|
26
27
|
mosamatic2/core/pipelines/__init__.py,sha256=Esb4TQFvY2soU2dfQPgVlhfTx1LdxYrPBiuAKDosHqA,85
|
|
27
28
|
mosamatic2/core/pipelines/defaultpipeline/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
28
|
-
mosamatic2/core/pipelines/defaultpipeline/defaultpipeline.py,sha256=
|
|
29
|
+
mosamatic2/core/pipelines/defaultpipeline/defaultpipeline.py,sha256=Bme0r_shnrllWYCYDNc6cLM2fQC2yD8RJKpRdoh_6Uc,3077
|
|
29
30
|
mosamatic2/core/pipelines/pipeline.py,sha256=mRxKXLKwgKDpc8R9mCI6gDKGJ2lKVxRQ__Sf0Mfn_Qc,384
|
|
30
31
|
mosamatic2/core/singleton.py,sha256=FV0k_LlOCmFhlWN6gf1c2x7YXWyd8-7DsIMvOKrI6NY,224
|
|
31
32
|
mosamatic2/core/tasks/__init__.py,sha256=w03AyCk2BQ6gGPBEKhtad6lt9WuwHC-nMztv7wQNwb4,759
|
|
32
33
|
mosamatic2/core/tasks/calculatescorestask/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
33
34
|
mosamatic2/core/tasks/calculatescorestask/calculatescorestask.py,sha256=jEbogrEnEtMbmfQ8KOGSUdGMhdeX69Bv01-82faRIlY,6617
|
|
34
35
|
mosamatic2/core/tasks/createdicomsummarytask/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
35
|
-
mosamatic2/core/tasks/createdicomsummarytask/createdicomsummarytask.py,sha256=
|
|
36
|
+
mosamatic2/core/tasks/createdicomsummarytask/createdicomsummarytask.py,sha256=kcdwIBnoAXexok2j6_tF_s6gwvn2DvjLwe_VhdODpbM,2957
|
|
36
37
|
mosamatic2/core/tasks/createpngsfromsegmentationstask/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
37
38
|
mosamatic2/core/tasks/createpngsfromsegmentationstask/createpngsfromsegmentationstask.py,sha256=1UpOsp1CH668BQ0g4tALou_tFgisC306VcvqOKSDuTo,1884
|
|
38
39
|
mosamatic2/core/tasks/dicom2niftitask/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -43,9 +44,9 @@ mosamatic2/core/tasks/segmentmusclefatl3tensorflowtask/__init__.py,sha256=47DEQp
|
|
|
43
44
|
mosamatic2/core/tasks/segmentmusclefatl3tensorflowtask/paramloader.py,sha256=VxTCOYK_1VRAG83P-ulm0LPvqXI-0iT5BCr0Rdr7MWg,900
|
|
44
45
|
mosamatic2/core/tasks/segmentmusclefatl3tensorflowtask/segmentmusclefatl3tensorflowtask.py,sha256=E3GHzGtl-v_qIdLjSy3cbDnf8vfWK6Bax3RAZcKCqXg,5149
|
|
45
46
|
mosamatic2/core/tasks/selectslicefromscanstask/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
46
|
-
mosamatic2/core/tasks/selectslicefromscanstask/selectslicefromscanstask.py,sha256=
|
|
47
|
+
mosamatic2/core/tasks/selectslicefromscanstask/selectslicefromscanstask.py,sha256=ST_ZMFyPNtsFsXCv7Yu7fnX2reHwom4D5DDPIkjukz0,4805
|
|
47
48
|
mosamatic2/core/tasks/task.py,sha256=APPnid6dpSGkPuDqU1vm2RIMR5vkpvbP1CPHUMjympg,1691
|
|
48
|
-
mosamatic2/core/utils.py,sha256=
|
|
49
|
+
mosamatic2/core/utils.py,sha256=iib_o_dD4hnqGIgOxLOfvMFOqLZOpt0iT_8Oarkmdjs,11723
|
|
49
50
|
mosamatic2/server.py,sha256=-cZ9BPsZUXoINKqwhCHN8c59mlvzzDXzTVxsYt9au70,4644
|
|
50
51
|
mosamatic2/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
51
52
|
mosamatic2/ui/mainwindow.py,sha256=nV9RqqSZVoVbU2opJIk7E3n4GvZWtuDETxmzwzmx4mg,13099
|
|
@@ -53,7 +54,7 @@ mosamatic2/ui/resources/icons/mosamatic2.icns,sha256=OfhC-diJTIgaNMOezxKKilGsY7m
|
|
|
53
54
|
mosamatic2/ui/resources/icons/mosamatic2.ico,sha256=ySD3RYluHK3pgS0Eas7eKrVk_AskdLQ4qs_IT-wNhq4,12229
|
|
54
55
|
mosamatic2/ui/resources/icons/spinner.gif,sha256=rvaac6GUZauHSPFSOLWr0RmLfjmtZih2Q8knQ2WP3Po,16240
|
|
55
56
|
mosamatic2/ui/resources/images/body-composition.jpg,sha256=KD-BudbXwThB4lJOZZN-ad5-TZRaaZ5cKTH0Ar1TOZs,21227
|
|
56
|
-
mosamatic2/ui/resources/VERSION,sha256=
|
|
57
|
+
mosamatic2/ui/resources/VERSION,sha256=rjrzwwdgM5RnMbKO12uDFNTXB8MXR6EtdrI79fSNyhA,9
|
|
57
58
|
mosamatic2/ui/settings.py,sha256=YEVHYJIfNsqMO3v1pjzgh7Pih9GGoUX7S9s8S-sBNUk,2121
|
|
58
59
|
mosamatic2/ui/utils.py,sha256=6bbPIrh4RJ_yhQKNZrgPbL4XeUEogjIjbk_e5c3QS5g,853
|
|
59
60
|
mosamatic2/ui/widgets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -85,7 +86,7 @@ mosamatic2/ui/widgets/panels/visualizations/slicevisualization/slicevisualizatio
|
|
|
85
86
|
mosamatic2/ui/widgets/panels/visualizations/visualization.py,sha256=JvqTJi7cCGYK1-wrN2oURdCOBoPS2clVUyYglhkoVJg,178
|
|
86
87
|
mosamatic2/ui/widgets/splashscreen.py,sha256=MS-OczOWfwwEQNQd-JWe9_Mh57css0cSQgbu973rwQo,4056
|
|
87
88
|
mosamatic2/ui/worker.py,sha256=v7e3gq7MUudgpB1BJW-P7j5wurzu6-HG5m7I6WHgJp0,699
|
|
88
|
-
mosamatic2-2.0.
|
|
89
|
-
mosamatic2-2.0.
|
|
90
|
-
mosamatic2-2.0.
|
|
91
|
-
mosamatic2-2.0.
|
|
89
|
+
mosamatic2-2.0.10.dist-info/entry_points.txt,sha256=MCUpKkgbej1clgp8EqlLQGs0BIKwGPcBPiVWLfGz9Gw,126
|
|
90
|
+
mosamatic2-2.0.10.dist-info/METADATA,sha256=O7XhZE4AY-lCnfN0GHXxv9GUZDYKYbhBo-5nB-oE_kk,1490
|
|
91
|
+
mosamatic2-2.0.10.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
92
|
+
mosamatic2-2.0.10.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|