Mercurial > hg > orthanc-tests
annotate Plugins/WSI/Run.py @ 444:dbe74add9a21
added missing file
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 09 Feb 2022 15:17:54 +0100 |
parents | e769bcf2b94f |
children | 06eea14c5906 |
rev | line source |
---|---|
251 | 1 #!/usr/bin/python |
2 # -*- coding: utf-8 -*- | |
3 | |
4 | |
5 # Orthanc - A Lightweight, RESTful DICOM Store | |
6 # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics | |
7 # Department, University Hospital of Liege, Belgium | |
363
79ce0f7a9714
upgrade to year 2021
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
316
diff
changeset
|
8 # Copyright (C) 2017-2021 Osimis S.A., Belgium |
437
e769bcf2b94f
added copyright UCLouvain
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
365
diff
changeset
|
9 # Copyright (C) 2021-2021 Sebastien Jodogne, ICTEAM UCLouvain, Belgium |
251 | 10 # |
11 # This program is free software: you can redistribute it and/or | |
12 # modify it under the terms of the GNU General Public License as | |
13 # published by the Free Software Foundation, either version 3 of the | |
14 # License, or (at your option) any later version. | |
15 # | |
16 # This program is distributed in the hope that it will be useful, but | |
17 # WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
19 # General Public License for more details. | |
20 # | |
21 # You should have received a copy of the GNU General Public License | |
22 # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
23 | |
24 | |
25 import argparse | |
26 import os | |
27 import pprint | |
28 import re | |
29 import subprocess | |
30 import sys | |
31 import tempfile | |
32 import unittest | |
33 from shutil import copyfile | |
34 | |
35 sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'Tests')) | |
36 from Toolbox import * | |
37 | |
38 | |
39 ## | |
40 ## Parse the command-line arguments | |
41 ## | |
42 | |
43 parser = argparse.ArgumentParser(description = 'Run the integration tests for the WSI Dicomizer.') | |
44 | |
45 parser.add_argument('--server', | |
46 default = 'localhost', | |
47 help = 'Address of the Orthanc server to test') | |
48 parser.add_argument('--rest', | |
49 type = int, | |
50 default = 8042, | |
51 help = 'Port to the REST API') | |
52 parser.add_argument('--username', | |
53 default = 'alice', | |
54 help = 'Username to the REST API') | |
55 parser.add_argument('--password', | |
56 default = 'orthanctest', | |
57 help = 'Password to the REST API') | |
58 parser.add_argument('--dicomizer', | |
59 default = '/home/jodogne/Subversion/orthanc-wsi/Applications/i/OrthancWSIDicomizer', | |
60 help = 'Password to the REST API') | |
61 parser.add_argument('--to-tiff', | |
62 default = '/home/jodogne/Subversion/orthanc-wsi/Applications/i/OrthancWSIDicomToTiff', | |
63 help = 'Password to the REST API') | |
252 | 64 parser.add_argument('--valgrind', help = 'Use valgrind while running the DICOM-izer', |
65 action = 'store_true') | |
251 | 66 parser.add_argument('--force', help = 'Do not warn the user', |
67 action = 'store_true') | |
68 parser.add_argument('options', metavar = 'N', nargs = '*', | |
69 help='Arguments to Python unittest') | |
70 | |
71 args = parser.parse_args() | |
72 | |
73 if not args.force: | |
74 print(""" | |
75 WARNING: This test will remove all the content of your | |
76 Orthanc instance running on %s! | |
77 | |
78 Are you sure ["yes" to go on]?""" % args.server) | |
79 | |
80 if sys.stdin.readline().strip() != 'yes': | |
81 print('Aborting...') | |
82 exit(0) | |
83 | |
84 | |
85 | |
86 | |
87 ## | |
88 ## The tests | |
89 ## | |
90 | |
91 ORTHANC = DefineOrthanc(server = args.server, | |
92 username = args.username, | |
93 password = args.password, | |
94 restPort = args.rest) | |
95 | |
253 | 96 def CallCommand(command): |
252 | 97 prefix = [] |
98 if args.valgrind: | |
99 prefix = [ 'valgrind' ] | |
100 | |
253 | 101 log = subprocess.check_output(prefix + command, |
252 | 102 stderr=subprocess.STDOUT) |
253 | 103 |
252 | 104 # If using valgrind, only print the lines from the log starting |
105 # with '==' (they contain the report from valgrind) | |
106 if args.valgrind: | |
107 print('\n'.join(filter(lambda x: x.startswith('=='), log.splitlines()))) | |
251 | 108 |
253 | 109 |
110 def CallDicomizer(suffix): | |
111 CallCommand([ args.dicomizer, | |
112 '--username=%s' % args.username, | |
113 '--password=%s' % args.password ] + suffix) | |
114 | |
115 | |
116 def CallDicomToTiff(suffix): | |
316 | 117 CallCommand([ args.to_tiff, |
118 '--username=%s' % args.username, | |
119 '--password=%s' % args.password ] + suffix) | |
253 | 120 |
121 | |
122 def CallTiffInfoOnSeries(series): | |
123 with tempfile.NamedTemporaryFile(delete = False) as temp: | |
124 temp.close() | |
125 CallDicomToTiff([ series, temp.name ]) | |
316 | 126 try: |
127 tiff = subprocess.check_output([ 'tiffinfo', temp.name ]) | |
128 except: | |
129 print('\ntiffinfo is probably not installed => sudo apt-get install libtiff-tools\n') | |
130 tiff = None | |
131 | |
253 | 132 os.unlink(temp.name) |
133 | |
134 return tiff | |
135 | |
251 | 136 |
137 class Orthanc(unittest.TestCase): | |
138 def setUp(self): | |
139 if (sys.version_info >= (3, 0)): | |
140 # Remove annoying warnings about unclosed socket in Python 3 | |
141 import warnings | |
142 warnings.simplefilter("ignore", ResourceWarning) | |
143 | |
144 DropOrthanc(ORTHANC) | |
145 | |
146 | |
147 def test_single(self): | |
148 CallDicomizer([ GetDatabasePath('Lena.jpg') ]) | |
149 | |
150 i = DoGet(ORTHANC, '/instances') | |
151 self.assertEqual(1, len(i)) | |
152 | |
153 tags = DoGet(ORTHANC, '/instances/%s/tags?simplify' % i[0]) | |
154 self.assertEqual(1, int(tags['NumberOfFrames'])) | |
155 self.assertEqual(512, int(tags['Columns'])) | |
156 self.assertEqual(512, int(tags['Rows'])) | |
157 self.assertEqual('YBR_FULL_422', tags['PhotometricInterpretation']) | |
158 | |
159 s = DoGet(ORTHANC, '/series') | |
160 self.assertEqual(1, len(s)) | |
161 | |
162 pyramid = DoGet(ORTHANC, '/wsi/pyramids/%s' % s[0]) | |
163 self.assertEqual(s[0], pyramid['ID']) | |
164 self.assertEqual(1, len(pyramid['Resolutions'])) | |
165 self.assertEqual(1, len(pyramid['Sizes'])) | |
166 self.assertEqual(1, len(pyramid['TilesCount'])) | |
167 self.assertEqual(1, pyramid['Resolutions'][0]) | |
168 self.assertEqual(512, pyramid['Sizes'][0][0]) | |
169 self.assertEqual(512, pyramid['Sizes'][0][1]) | |
364
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
170 self.assertEqual(1, len(pyramid['TilesSizes'])) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
171 self.assertEqual(2, len(pyramid['TilesSizes'][0])) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
172 self.assertEqual(512, pyramid['TilesSizes'][0][0]) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
173 self.assertEqual(512, pyramid['TilesSizes'][0][1]) |
251 | 174 self.assertEqual(512, pyramid['TotalWidth']) |
175 self.assertEqual(512, pyramid['TotalHeight']) | |
176 self.assertEqual(1, pyramid['TilesCount'][0][0]) | |
177 self.assertEqual(1, pyramid['TilesCount'][0][1]) | |
178 | |
253 | 179 tiff = CallTiffInfoOnSeries(s[0]) |
180 p = filter(lambda x: 'Photometric Interpretation' in x, tiff.splitlines()) | |
181 self.assertEqual(1, len(p)) | |
182 self.assertTrue('YCbCr' in p[0]) | |
183 | |
251 | 184 |
185 def test_grayscale_pyramid(self): | |
186 CallDicomizer([ GetDatabasePath('LenaGrayscale.png'), '--tile-width=64', '--tile-height=64' ]) | |
187 | |
188 i = DoGet(ORTHANC, '/instances') | |
189 self.assertEqual(4, len(i)) | |
190 | |
191 for j in range(4): | |
192 tags = DoGet(ORTHANC, '/instances/%s/tags?simplify' % i[j]) | |
193 self.assertEqual(64, int(tags['Columns'])) | |
194 self.assertEqual(64, int(tags['Rows'])) | |
195 self.assertEqual('MONOCHROME2', tags['PhotometricInterpretation']) | |
196 | |
197 s = DoGet(ORTHANC, '/series') | |
198 self.assertEqual(1, len(s)) | |
199 | |
200 pyramid = DoGet(ORTHANC, '/wsi/pyramids/%s' % s[0]) | |
201 self.assertEqual(s[0], pyramid['ID']) | |
202 self.assertEqual(4, len(pyramid['Resolutions'])) | |
203 self.assertEqual(4, len(pyramid['Sizes'])) | |
204 self.assertEqual(4, len(pyramid['TilesCount'])) | |
364
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
205 self.assertEqual(4, len(pyramid['TilesSizes'])) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
206 |
251 | 207 self.assertEqual(1, pyramid['Resolutions'][0]) |
208 self.assertEqual(2, pyramid['Resolutions'][1]) | |
209 self.assertEqual(4, pyramid['Resolutions'][2]) | |
210 self.assertEqual(8, pyramid['Resolutions'][3]) | |
211 self.assertEqual(512, pyramid['Sizes'][0][0]) | |
212 self.assertEqual(512, pyramid['Sizes'][0][1]) | |
213 self.assertEqual(256, pyramid['Sizes'][1][0]) | |
214 self.assertEqual(256, pyramid['Sizes'][1][1]) | |
215 self.assertEqual(128, pyramid['Sizes'][2][0]) | |
216 self.assertEqual(128, pyramid['Sizes'][2][1]) | |
217 self.assertEqual(64, pyramid['Sizes'][3][0]) | |
218 self.assertEqual(64, pyramid['Sizes'][3][1]) | |
364
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
219 for i in range(4): |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
220 self.assertEqual(2, len(pyramid['TilesSizes'][i])) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
221 self.assertEqual(64, pyramid['TilesSizes'][i][0]) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
222 self.assertEqual(64, pyramid['TilesSizes'][i][1]) |
251 | 223 self.assertEqual(512, pyramid['TotalWidth']) |
224 self.assertEqual(512, pyramid['TotalHeight']) | |
225 self.assertEqual(8, pyramid['TilesCount'][0][0]) | |
226 self.assertEqual(8, pyramid['TilesCount'][0][1]) | |
227 self.assertEqual(4, pyramid['TilesCount'][1][0]) | |
228 self.assertEqual(4, pyramid['TilesCount'][1][1]) | |
229 self.assertEqual(2, pyramid['TilesCount'][2][0]) | |
230 self.assertEqual(2, pyramid['TilesCount'][2][1]) | |
231 self.assertEqual(1, pyramid['TilesCount'][3][0]) | |
232 self.assertEqual(1, pyramid['TilesCount'][3][1]) | |
253 | 233 |
234 tiff = CallTiffInfoOnSeries(s[0]) | |
235 p = filter(lambda x: 'Photometric Interpretation' in x, tiff.splitlines()) | |
236 self.assertEqual(4, len(p)) | |
237 for j in range(4): | |
238 self.assertTrue('min-is-black' in p[j]) | |
239 | |
240 | |
241 def test_import_tiff_grayscale(self): | |
242 CallDicomizer([ GetDatabasePath('WSI/LenaGrayscaleJpeg.tiff') ]) | |
243 | |
244 s = DoGet(ORTHANC, '/series') | |
245 self.assertEqual(1, len(s)) | |
246 | |
247 pyramid = DoGet(ORTHANC, '/wsi/pyramids/%s' % s[0]) | |
248 self.assertEqual(4, len(pyramid['Resolutions'])) | |
249 | |
250 tiff = CallTiffInfoOnSeries(s[0]) | |
251 p = filter(lambda x: 'Photometric Interpretation' in x, tiff.splitlines()) | |
252 self.assertEqual(4, len(p)) | |
253 for j in range(4): | |
254 self.assertTrue('min-is-black' in p[j]) | |
255 | |
256 | |
257 def test_import_tiff_ycbcr(self): | |
258 CallDicomizer([ GetDatabasePath('WSI/LenaColorJpegYCbCr.tiff') ]) | |
259 | |
260 s = DoGet(ORTHANC, '/series') | |
261 self.assertEqual(1, len(s)) | |
262 | |
263 pyramid = DoGet(ORTHANC, '/wsi/pyramids/%s' % s[0]) | |
264 self.assertEqual(4, len(pyramid['Resolutions'])) | |
265 | |
266 tiff = CallTiffInfoOnSeries(s[0]) | |
267 p = filter(lambda x: 'Photometric Interpretation' in x, tiff.splitlines()) | |
268 self.assertEqual(4, len(p)) | |
269 for j in range(4): | |
270 self.assertTrue('YCbCr' in p[j]) | |
271 | |
272 | |
273 def test_import_tiff_rgb(self): | |
274 CallDicomizer([ GetDatabasePath('WSI/LenaColorJpegRGB.tiff') ]) | |
275 | |
276 s = DoGet(ORTHANC, '/series') | |
277 self.assertEqual(1, len(s)) | |
278 | |
279 pyramid = DoGet(ORTHANC, '/wsi/pyramids/%s' % s[0]) | |
280 self.assertEqual(4, len(pyramid['Resolutions'])) | |
281 | |
282 tiff = CallTiffInfoOnSeries(s[0]) | |
283 p = filter(lambda x: 'Photometric Interpretation' in x, tiff.splitlines()) | |
284 self.assertEqual(4, len(p)) | |
285 for j in range(4): | |
286 self.assertTrue('RGB' in p[j]) | |
287 | |
364
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
288 |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
289 def test_concatenation(self): |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
290 # https://bugs.orthanc-server.com/show_bug.cgi?id=145 |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
291 CallDicomizer([ GetDatabasePath('LenaGrayscale.png'), '--levels=1', ]) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
292 i = DoGet(ORTHANC, '/instances') |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
293 self.assertEqual(1, len(i)) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
294 tags = DoGet(ORTHANC, '/instances/%s/tags?short' % i[0]) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
295 self.assertTrue('0020,0242' in tags) # SOP Instance UID of Concatenation Source |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
296 self.assertTrue('0020,9161' in tags) # Concatenation UID |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
297 self.assertTrue('0020,9162' in tags) # In-concatenation Number |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
298 self.assertTrue('0020,9228' in tags) # Concatenation Frame Offset Number |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
299 self.assertEqual('1', tags['0020,9162']) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
300 self.assertEqual('0', tags['0020,9228']) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
301 |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
302 DropOrthanc(ORTHANC) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
303 |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
304 # "--max-size" disables the concatenation |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
305 CallDicomizer([ GetDatabasePath('LenaGrayscale.png'), '--levels=1', '--max-size=0' ]) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
306 i = DoGet(ORTHANC, '/instances') |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
307 self.assertEqual(1, len(i)) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
308 tags = DoGet(ORTHANC, '/instances/%s/tags?short' % i[0]) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
309 self.assertFalse('0020,0242' in tags) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
310 self.assertFalse('0020,9161' in tags) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
311 self.assertFalse('0020,9162' in tags) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
312 self.assertFalse('0020,9228' in tags) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
313 |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
314 DropOrthanc(ORTHANC) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
315 |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
316 # This creates a series with 2 instances of roughly 1.5MB (= 2 frames x 512 x 512 x 3 (RGB24) + DICOM overhead) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
317 CallDicomizer([ GetDatabasePath('WSI/Lena2x2.png'), '--levels=1', '--max-size=1', '--compression=none' ]) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
318 i = DoGet(ORTHANC, '/instances') |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
319 self.assertEqual(2, len(i)) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
320 t1 = DoGet(ORTHANC, '/instances/%s/tags?short' % i[0]) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
321 t2 = DoGet(ORTHANC, '/instances/%s/tags?short' % i[1]) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
322 self.assertTrue('0020,0242' in t1) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
323 self.assertTrue('0020,9161' in t1) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
324 self.assertTrue('0020,9162' in t1) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
325 self.assertTrue('0020,9228' in t1) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
326 self.assertEqual(t1['0020,0242'], t2['0020,0242']) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
327 self.assertEqual(t1['0020,9161'], t2['0020,9161']) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
328 if t1['0020,9162'] == '1': |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
329 self.assertEqual('1', t1['0020,9162']) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
330 self.assertEqual('0', t1['0020,9228']) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
331 self.assertEqual('2', t2['0020,9162']) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
332 self.assertEqual('2', t2['0020,9228']) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
333 else: |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
334 self.assertEqual('1', t2['0020,9162']) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
335 self.assertEqual('0', t2['0020,9228']) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
336 self.assertEqual('2', t1['0020,9162']) |
6fa8218cf8db
wsi: test_concatenation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
337 self.assertEqual('2', t1['0020,9228']) |
365
27cb0b60f2d3
wsi: test_pixel_spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
364
diff
changeset
|
338 |
27cb0b60f2d3
wsi: test_pixel_spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
364
diff
changeset
|
339 |
27cb0b60f2d3
wsi: test_pixel_spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
364
diff
changeset
|
340 def test_pixel_spacing(self): |
27cb0b60f2d3
wsi: test_pixel_spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
364
diff
changeset
|
341 # https://bugs.orthanc-server.com/show_bug.cgi?id=139 |
27cb0b60f2d3
wsi: test_pixel_spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
364
diff
changeset
|
342 CallDicomizer([ GetDatabasePath('LenaGrayscale.png'), # Image is 512x512 |
27cb0b60f2d3
wsi: test_pixel_spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
364
diff
changeset
|
343 '--levels=4', '--tile-width=64', '--tile-height=64', '--max-size=0', |
27cb0b60f2d3
wsi: test_pixel_spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
364
diff
changeset
|
344 '--imaged-width=20', '--imaged-height=10' ]) |
27cb0b60f2d3
wsi: test_pixel_spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
364
diff
changeset
|
345 |
27cb0b60f2d3
wsi: test_pixel_spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
364
diff
changeset
|
346 instances = DoGet(ORTHANC, '/instances') |
27cb0b60f2d3
wsi: test_pixel_spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
364
diff
changeset
|
347 self.assertEqual(4, len(instances)) |
27cb0b60f2d3
wsi: test_pixel_spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
364
diff
changeset
|
348 |
27cb0b60f2d3
wsi: test_pixel_spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
364
diff
changeset
|
349 spacings = {} |
27cb0b60f2d3
wsi: test_pixel_spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
364
diff
changeset
|
350 for i in instances: |
27cb0b60f2d3
wsi: test_pixel_spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
364
diff
changeset
|
351 t = DoGet(ORTHANC, '/instances/%s/tags?short' % i) |
27cb0b60f2d3
wsi: test_pixel_spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
364
diff
changeset
|
352 spacings[t['0028,0008']] = t['5200,9229'][0]['0028,9110'][0]['0028,0030'] |
27cb0b60f2d3
wsi: test_pixel_spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
364
diff
changeset
|
353 |
27cb0b60f2d3
wsi: test_pixel_spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
364
diff
changeset
|
354 self.assertEqual(4, len(spacings)) |
27cb0b60f2d3
wsi: test_pixel_spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
364
diff
changeset
|
355 for i in range(4): |
27cb0b60f2d3
wsi: test_pixel_spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
364
diff
changeset
|
356 s = spacings[str(4 ** i)].split('\\') |
27cb0b60f2d3
wsi: test_pixel_spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
364
diff
changeset
|
357 self.assertEqual(2, len(s)) |
27cb0b60f2d3
wsi: test_pixel_spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
364
diff
changeset
|
358 self.assertEqual(20.0 / 512.0 * (2.0 ** (3 - i)), float(s[0])) |
27cb0b60f2d3
wsi: test_pixel_spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
364
diff
changeset
|
359 self.assertEqual(10.0 / 512.0 * (2.0 ** (3 - i)), float(s[1])) |
27cb0b60f2d3
wsi: test_pixel_spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
364
diff
changeset
|
360 |
27cb0b60f2d3
wsi: test_pixel_spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
364
diff
changeset
|
361 |
251 | 362 try: |
363 print('\nStarting the tests...') | |
364 unittest.main(argv = [ sys.argv[0] ] + args.options) | |
365 | |
366 finally: | |
367 print('\nDone') |