File: test_basic_directory_creator.py

package info (click to toggle)
odil 0.13.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,476 kB
  • sloc: cpp: 55,982; python: 3,947; javascript: 460; xml: 182; makefile: 99; sh: 36
file content (124 lines) | stat: -rw-r--r-- 4,746 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import os
import shutil
import tempfile
import unittest

import odil

class TestBasicDirectoryCreator(unittest.TestCase):
    def setUp(self):
        self.root = tempfile.mkdtemp()

        data_set_1 = odil.DataSet()
        data_set_1.add("PatientID", ["DJ123"])
        data_set_1.add("StudyDate", ["19100110"])
        data_set_1.add("StudyTime", ["1234"])
        data_set_1.add("StudyDescription", ["Study"])
        data_set_1.add("StudyInstanceUID", ["1.2.3.4"])
        data_set_1.add("StudyID", ["FOO"])
        data_set_1.add("Modality", ["OT"])
        data_set_1.add("SeriesInstanceUID", ["1.2.3.4.1"])
        data_set_1.add("SeriesNumber", [1])
        data_set_1.add("SeriesDescription", ["Series"])
        data_set_1.add("InstanceNumber", [1])
        data_set_1.add("SOPInstanceUID", ["1.2.3.4.1.1"])
        data_set_1.add("SOPClassUID", [odil.registry.RawDataStorage])

        with open(os.path.join(self.root, "a.dcm"), "wb") as fd:
            stream_1 = odil.iostream(fd)
            odil.Writer.write_file(data_set_1, stream_1)

        data_set_2 = odil.DataSet()
        data_set_2.add("PatientID", ["DJ123"])
        data_set_2.add("StudyDate", ["19100110"])
        data_set_2.add("StudyTime", ["1234"])
        data_set_2.add("StudyDescription", ["Study"])
        data_set_2.add("StudyInstanceUID", ["1.2.3.4"])
        data_set_2.add("StudyID", ["FOO"])
        data_set_2.add("Modality", ["OT"])
        data_set_2.add("SeriesInstanceUID", ["1.2.3.4.1"])
        data_set_2.add("SeriesNumber", [1])
        data_set_2.add("SeriesDescription", ["Series"])
        data_set_2.add("InstanceNumber", [2])
        data_set_2.add("SOPInstanceUID", ["1.2.3.4.1.2"])
        data_set_2.add("SOPClassUID", [odil.registry.RawDataStorage])

        with open(os.path.join(self.root, "b.dcm"), "wb") as fd:
            stream_2 = odil.iostream(fd)
            odil.Writer.write_file(data_set_2, stream_2)

        self.files = ["a.dcm", "b.dcm"]

    def tearDown(self):
        shutil.rmtree(self.root)

    def test_default_record_keys(self):
        creator = odil.BasicDirectoryCreator(self.root, self.files)
        creator()
        with open(os.path.join(self.root, "DICOMDIR"), "rb") as fd:
            header, dicomdir = odil.Reader.read_file(odil.iostream(fd))

        records = dicomdir.as_data_set("DirectoryRecordSequence")

        self._test_default_records(records)

    def test_extra_record_keys_list(self):
        creator = odil.BasicDirectoryCreator(
            self.root, self.files,
            { "SERIES": [["SeriesDescription", 1]]})
        creator()
        with open(os.path.join(self.root, "DICOMDIR"), "rb") as fd:
            header, dicomdir = odil.Reader.read_file(odil.iostream(fd))

        records = dicomdir.as_data_set("DirectoryRecordSequence")

        self._test_default_records(records)
        self.assertSequenceEqual(
            records[2].as_string("SeriesDescription"), [b"Series"])

    def test_extra_record_keys_tuple(self):
        creator = odil.BasicDirectoryCreator(
            self.root, self.files,
            { "SERIES": (("SeriesDescription", 1), )})
        creator()
        with open(os.path.join(self.root, "DICOMDIR"), "rb") as fd:
            header, dicomdir = odil.Reader.read_file(odil.iostream(fd))

        records = dicomdir.as_data_set("DirectoryRecordSequence")

        self._test_default_records(records)
        self.assertSequenceEqual(
            records[2].as_string("SeriesDescription"), [b"Series"])

    def _test_default_records(self, records):
        self.assertEqual(len(records), 5)

        self.assertSequenceEqual(
            records[0].as_string("DirectoryRecordType"), [b"PATIENT"])
        self.assertSequenceEqual(
            records[0].as_string("PatientID"), [b"DJ123"])

        self.assertSequenceEqual(
            records[1].as_string("DirectoryRecordType"), [b"STUDY"])
        self.assertSequenceEqual(
            records[1].as_string("StudyInstanceUID"), [b"1.2.3.4"])
        self.assertSequenceEqual(
            records[1].as_string("StudyDescription"), [b"Study"])

        self.assertSequenceEqual(
            records[2].as_string("DirectoryRecordType"), [b"SERIES"])
        self.assertSequenceEqual(
            records[2].as_string("SeriesInstanceUID"), [b"1.2.3.4.1"])

        self.assertSequenceEqual(
            records[3].as_string("DirectoryRecordType"), [b"IMAGE"])
        self.assertSequenceEqual(
            records[3].as_int("InstanceNumber"), [1])

        self.assertSequenceEqual(
            records[4].as_string("DirectoryRecordType") , [b"IMAGE"])
        self.assertSequenceEqual(
            records[4].as_int("InstanceNumber"), [2])

if __name__ == "__main__":
    unittest.main()