dicom 0.9.3 → 0.9.4
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +312 -290
- data/COPYING +674 -674
- data/Gemfile +3 -0
- data/dicom.gemspec +31 -0
- data/lib/dicom.rb +53 -51
- data/lib/dicom/anonymizer.rb +98 -123
- data/lib/dicom/audit_trail.rb +104 -116
- data/lib/dicom/constants.rb +219 -170
- data/lib/dicom/d_client.rb +122 -150
- data/lib/dicom/d_library.rb +219 -287
- data/lib/dicom/d_object.rb +451 -539
- data/lib/dicom/d_read.rb +151 -245
- data/lib/dicom/d_server.rb +329 -359
- data/lib/dicom/d_write.rb +327 -395
- data/lib/dicom/deprecated.rb +1 -72
- data/lib/dicom/dictionary/elements.txt +3646 -0
- data/lib/dicom/dictionary/uids.txt +334 -0
- data/lib/dicom/dictionary_element.rb +61 -0
- data/lib/dicom/element.rb +278 -218
- data/lib/dicom/elemental.rb +21 -27
- data/lib/dicom/file_handler.rb +121 -121
- data/lib/dicom/image_item.rb +819 -861
- data/lib/dicom/image_processor.rb +24 -15
- data/lib/dicom/image_processor_mini_magick.rb +21 -23
- data/lib/dicom/image_processor_r_magick.rb +39 -34
- data/lib/dicom/item.rb +133 -120
- data/lib/dicom/link.rb +1531 -1532
- data/lib/dicom/logging.rb +155 -158
- data/lib/dicom/parent.rb +782 -847
- data/lib/dicom/ruby_extensions.rb +248 -229
- data/lib/dicom/sequence.rb +109 -92
- data/lib/dicom/stream.rb +480 -511
- data/lib/dicom/uid.rb +82 -0
- data/lib/dicom/variables.rb +9 -9
- data/lib/dicom/version.rb +5 -5
- data/rakefile.rb +29 -0
- metadata +130 -76
- data/lib/dicom/dictionary.rb +0 -3280
@@ -0,0 +1,334 @@
|
|
1
|
+
1.2.840.10008.1.1 Verification SOP Class SOP Class
|
2
|
+
1.2.840.10008.1.2 Implicit VR Little Endian: Default Transfer Syntax for DICOM Transfer Syntax
|
3
|
+
1.2.840.10008.1.2.1 Explicit VR Little Endian Transfer Syntax
|
4
|
+
1.2.840.10008.1.2.1.99 Deflated Explicit VR Little Endian Transfer Syntax
|
5
|
+
1.2.840.10008.1.2.2 Explicit VR Big Endian Transfer Syntax
|
6
|
+
1.2.840.10008.1.2.4.50 JPEG Baseline (Process 1): Default Transfer Syntax for Lossy JPEG 8 Bit Image Compression Transfer Syntax
|
7
|
+
1.2.840.10008.1.2.4.51 JPEG Extended (Process 2 & 4): Default Transfer Syntax for Lossy JPEG 12 Bit Image Compression (Process 4 only) Transfer Syntax
|
8
|
+
1.2.840.10008.1.2.4.52 JPEG Extended (Process 3 & 5) (Retired) Transfer Syntax R
|
9
|
+
1.2.840.10008.1.2.4.53 JPEG Spectral Selection, Non-Hierarchical (Process 6 & 8) (Retired) Transfer Syntax R
|
10
|
+
1.2.840.10008.1.2.4.54 JPEG Spectral Selection, Non-Hierarchical (Process 7 & 9) (Retired) Transfer Syntax R
|
11
|
+
1.2.840.10008.1.2.4.55 JPEG Full Progression, Non-Hierarchical (Process 10 & 12) (Retired) Transfer Syntax R
|
12
|
+
1.2.840.10008.1.2.4.56 JPEG Full Progression, Non-Hierarchical (Process 11 & 13) (Retired) Transfer Syntax R
|
13
|
+
1.2.840.10008.1.2.4.57 JPEG Lossless, Non-Hierarchical (Process 14) Transfer Syntax
|
14
|
+
1.2.840.10008.1.2.4.58 JPEG Lossless, Non-Hierarchical (Process 15) (Retired) Transfer Syntax R
|
15
|
+
1.2.840.10008.1.2.4.59 JPEG Extended, Hierarchical (Process 16 & 18) (Retired) Transfer Syntax R
|
16
|
+
1.2.840.10008.1.2.4.60 JPEG Extended, Hierarchical (Process 17 & 19) (Retired) Transfer Syntax R
|
17
|
+
1.2.840.10008.1.2.4.61 JPEG Spectral Selection, Hierarchical (Process 20 & 22) (Retired) Transfer Syntax R
|
18
|
+
1.2.840.10008.1.2.4.62 JPEG Spectral Selection, Hierarchical (Process 21 & 23) (Retired) Transfer Syntax R
|
19
|
+
1.2.840.10008.1.2.4.63 JPEG Full Progression, Hierarchical (Process 24 & 26) (Retired) Transfer Syntax R
|
20
|
+
1.2.840.10008.1.2.4.64 JPEG Full Progression, Hierarchical (Process 25 & 27) (Retired) Transfer Syntax R
|
21
|
+
1.2.840.10008.1.2.4.65 JPEG Lossless, Hierarchical (Process 28) (Retired) Transfer Syntax R
|
22
|
+
1.2.840.10008.1.2.4.66 JPEG Lossless, Hierarchical (Process 29) (Retired) Transfer Syntax R
|
23
|
+
1.2.840.10008.1.2.4.70 JPEG Lossless, Non-Hierarchical, First-Order Prediction (Process 14 [Selection Value 1]): Default Transfer Syntax for Lossless JPEG Image Compression Transfer Syntax
|
24
|
+
1.2.840.10008.1.2.4.80 JPEG-LS Lossless Image Compression Transfer Syntax
|
25
|
+
1.2.840.10008.1.2.4.81 JPEG-LS Lossy (Near-Lossless) Image Compression Transfer Syntax
|
26
|
+
1.2.840.10008.1.2.4.90 JPEG 2000 Image Compression (Lossless Only) Transfer Syntax
|
27
|
+
1.2.840.10008.1.2.4.91 JPEG 2000 Image Compression Transfer Syntax
|
28
|
+
1.2.840.10008.1.2.4.92 JPEG 2000 Part 2 Multi-component Image Compression (Lossless Only) Transfer Syntax
|
29
|
+
1.2.840.10008.1.2.4.93 JPEG 2000 Part 2 Multi-component Image Compression Transfer Syntax
|
30
|
+
1.2.840.10008.1.2.4.94 JPIP Referenced Transfer Syntax
|
31
|
+
1.2.840.10008.1.2.4.95 JPIP Referenced Deflate Transfer Syntax
|
32
|
+
1.2.840.10008.1.2.4.100 MPEG2 Main Profile @ Main Level Transfer Syntax
|
33
|
+
1.2.840.10008.1.2.4.101 MPEG2 Main Profile @ High Level Transfer Syntax
|
34
|
+
1.2.840.10008.1.2.4.102 MPEG-4 AVC/H.264 High Profile / Level 4.1 Transfer Syntax
|
35
|
+
1.2.840.10008.1.2.4.103 MPEG-4 AVC/H.264 BD-compatible High Profile / Level 4.1 Transfer Syntax
|
36
|
+
1.2.840.10008.1.2.5 RLE Lossless Transfer Syntax
|
37
|
+
1.2.840.10008.1.2.6.1 RFC 2557 MIME encapsulation Transfer Syntax
|
38
|
+
1.2.840.10008.1.2.6.2 XML Encoding Transfer Syntax
|
39
|
+
1.2.840.10008.1.3.10 Media Storage Directory Storage SOP Class
|
40
|
+
1.2.840.10008.1.4.1.1 Talairach Brain Atlas Frame of Reference Well-known frame of reference
|
41
|
+
1.2.840.10008.1.4.1.2 SPM2 T1 Frame of Reference Well-known frame of reference
|
42
|
+
1.2.840.10008.1.4.1.3 SPM2 T2 Frame of Reference Well-known frame of reference
|
43
|
+
1.2.840.10008.1.4.1.4 SPM2 PD Frame of Reference Well-known frame of reference
|
44
|
+
1.2.840.10008.1.4.1.5 SPM2 EPI Frame of Reference Well-known frame of reference
|
45
|
+
1.2.840.10008.1.4.1.6 SPM2 FIL T1 Frame of Reference Well-known frame of reference
|
46
|
+
1.2.840.10008.1.4.1.7 SPM2 PET Frame of Reference Well-known frame of reference
|
47
|
+
1.2.840.10008.1.4.1.8 SPM2 TRANSM Frame of Reference Well-known frame of reference
|
48
|
+
1.2.840.10008.1.4.1.9 SPM2 SPECT Frame of Reference Well-known frame of reference
|
49
|
+
1.2.840.10008.1.4.1.10 SPM2 GRAY Frame of Reference Well-known frame of reference
|
50
|
+
1.2.840.10008.1.4.1.11 SPM2 WHITE Frame of Reference Well-known frame of reference
|
51
|
+
1.2.840.10008.1.4.1.12 SPM2 CSF Frame of Reference Well-known frame of reference
|
52
|
+
1.2.840.10008.1.4.1.13 SPM2 BRAINMASK Frame of Reference Well-known frame of reference
|
53
|
+
1.2.840.10008.1.4.1.14 SPM2 AVG305T1 Frame of Reference Well-known frame of reference
|
54
|
+
1.2.840.10008.1.4.1.15 SPM2 AVG152T1 Frame of Reference Well-known frame of reference
|
55
|
+
1.2.840.10008.1.4.1.16 SPM2 AVG152T2 Frame of Reference Well-known frame of reference
|
56
|
+
1.2.840.10008.1.4.1.17 SPM2 AVG152PD Frame of Reference Well-known frame of reference
|
57
|
+
1.2.840.10008.1.4.1.18 SPM2 SINGLESUBJT1 Frame of Reference Well-known frame of reference
|
58
|
+
1.2.840.10008.1.4.2.1 ICBM 452 T1 Frame of Reference Well-known frame of reference
|
59
|
+
1.2.840.10008.1.4.2.2 ICBM Single Subject MRI Frame of Reference Well-known frame of reference
|
60
|
+
1.2.840.10008.1.5.1 Hot Iron Color Palette SOP Instance Well-known SOP Instance
|
61
|
+
1.2.840.10008.1.5.2 PET Color Palette SOP Instance Well-known SOP Instance
|
62
|
+
1.2.840.10008.1.5.3 Hot Metal Blue Color Palette SOP Instance Well-known SOP Instance
|
63
|
+
1.2.840.10008.1.5.4 PET 20 Step Color Palette SOP Instance Well-known SOP Instance
|
64
|
+
1.2.840.10008.1.9 Basic Study Content Notification SOP Class (Retired) SOP Class R
|
65
|
+
1.2.840.10008.1.20.1 Storage Commitment Push Model SOP Class SOP Class
|
66
|
+
1.2.840.10008.1.20.1.1 Storage Commitment Push Model SOP Instance Well-known SOP Instance
|
67
|
+
1.2.840.10008.1.20.2 Storage Commitment Pull Model SOP Class (Retired) SOP Class R
|
68
|
+
1.2.840.10008.1.20.2.1 Storage Commitment Pull Model SOP Instance (Retired) Well-known SOP Instance R
|
69
|
+
1.2.840.10008.1.40 Procedural Event Logging SOP Class SOP Class
|
70
|
+
1.2.840.10008.1.40.1 Procedural Event Logging SOP Instance Well-known SOP Instance
|
71
|
+
1.2.840.10008.1.42 Substance Administration Logging SOP Class SOP Class
|
72
|
+
1.2.840.10008.1.42.1 Substance Administration Logging SOP Instance Well-known SOP Instance
|
73
|
+
1.2.840.10008.2.6.1 DICOM UID Registry DICOM UIDs as a Coding Scheme
|
74
|
+
1.2.840.10008.2.16.4 DICOM Controlled Terminology Coding Scheme
|
75
|
+
1.2.840.10008.3.1.1.1 DICOM Application Context Name Application Context Name
|
76
|
+
1.2.840.10008.3.1.2.1.1 Detached Patient Management SOP Class (Retired) SOP Class R
|
77
|
+
1.2.840.10008.3.1.2.1.4 Detached Patient Management Meta SOP Class (Retired) Meta SOP Class R
|
78
|
+
1.2.840.10008.3.1.2.2.1 Detached Visit Management SOP Class (Retired) SOP Class R
|
79
|
+
1.2.840.10008.3.1.2.3.1 Detached Study Management SOP Class (Retired) SOP Class R
|
80
|
+
1.2.840.10008.3.1.2.3.2 Study Component Management SOP Class (Retired) SOP Class R
|
81
|
+
1.2.840.10008.3.1.2.5.1 Detached Results Management SOP Class (Retired) SOP Class R
|
82
|
+
1.2.840.10008.3.1.2.5.4 Detached Results Management Meta SOP Class (Retired) Meta SOP Class R
|
83
|
+
1.2.840.10008.3.1.2.5.5 Detached Study Management Meta SOP Class (Retired) Meta SOP Class R
|
84
|
+
1.2.840.10008.3.1.2.6.1 Detached Interpretation Management SOP Class (Retired) SOP Class R
|
85
|
+
1.2.840.10008.4.2 Storage Service Class Service Class
|
86
|
+
1.2.840.10008.5.1.1.1 Basic Film Session SOP Class SOP Class
|
87
|
+
1.2.840.10008.5.1.1.2 Basic Film Box SOP Class SOP Class
|
88
|
+
1.2.840.10008.5.1.1.4 Basic Grayscale Image Box SOP Class SOP Class
|
89
|
+
1.2.840.10008.5.1.1.4.1 Basic Color Image Box SOP Class SOP Class
|
90
|
+
1.2.840.10008.5.1.1.4.2 Referenced Image Box SOP Class (Retired) SOP Class R
|
91
|
+
1.2.840.10008.5.1.1.9 Basic Grayscale Print Management Meta SOP Class Meta SOP Class
|
92
|
+
1.2.840.10008.5.1.1.9.1 Referenced Grayscale Print Management Meta SOP Class (Retired) Meta SOP Class R
|
93
|
+
1.2.840.10008.5.1.1.14 Print Job SOP Class SOP Class
|
94
|
+
1.2.840.10008.5.1.1.15 Basic Annotation Box SOP Class SOP Class
|
95
|
+
1.2.840.10008.5.1.1.16 Printer SOP Class SOP Class
|
96
|
+
1.2.840.10008.5.1.1.16.376 Printer Configuration Retrieval SOP Class SOP Class
|
97
|
+
1.2.840.10008.5.1.1.17 Printer SOP Instance Well-known Printer SOP Instance
|
98
|
+
1.2.840.10008.5.1.1.17.376 Printer Configuration Retrieval SOP Instance Well-known Printer SOP Instance
|
99
|
+
1.2.840.10008.5.1.1.18 Basic Color Print Management Meta SOP Class Meta SOP Class
|
100
|
+
1.2.840.10008.5.1.1.18.1 Referenced Color Print Management Meta SOP Class (Retired) Meta SOP Class R
|
101
|
+
1.2.840.10008.5.1.1.22 VOI LUT Box SOP Class SOP Class
|
102
|
+
1.2.840.10008.5.1.1.23 Presentation LUT SOP Class SOP Class
|
103
|
+
1.2.840.10008.5.1.1.24 Image Overlay Box SOP Class (Retired) SOP Class R
|
104
|
+
1.2.840.10008.5.1.1.24.1 Basic Print Image Overlay Box SOP Class (Retired) SOP Class R
|
105
|
+
1.2.840.10008.5.1.1.25 Print Queue SOP Instance (Retired) Well-known Print Queue SOP Instance R
|
106
|
+
1.2.840.10008.5.1.1.26 Print Queue Management SOP Class (Retired) SOP Class R
|
107
|
+
1.2.840.10008.5.1.1.27 Stored Print Storage SOP Class (Retired) SOP Class R
|
108
|
+
1.2.840.10008.5.1.1.29 Hardcopy Grayscale Image Storage SOP Class (Retired) SOP Class R
|
109
|
+
1.2.840.10008.5.1.1.30 Hardcopy Color Image Storage SOP Class (Retired) SOP Class R
|
110
|
+
1.2.840.10008.5.1.1.31 Pull Print Request SOP Class (Retired) SOP Class R
|
111
|
+
1.2.840.10008.5.1.1.32 Pull Stored Print Management Meta SOP Class (Retired) Meta SOP Class R
|
112
|
+
1.2.840.10008.5.1.1.33 Media Creation Management SOP Class UID SOP Class
|
113
|
+
1.2.840.10008.5.1.4.1.1.1 Computed Radiography Image Storage SOP Class
|
114
|
+
1.2.840.10008.5.1.4.1.1.1.1 Digital X-Ray Image Storage - For Presentation SOP Class
|
115
|
+
1.2.840.10008.5.1.4.1.1.1.1.1 Digital X-Ray Image Storage - For Processing SOP Class
|
116
|
+
1.2.840.10008.5.1.4.1.1.1.2 Digital Mammography X-Ray Image Storage - For Presentation SOP Class
|
117
|
+
1.2.840.10008.5.1.4.1.1.1.2.1 Digital Mammography X-Ray Image Storage - For Processing SOP Class
|
118
|
+
1.2.840.10008.5.1.4.1.1.1.3 Digital Intra-oral X-Ray Image Storage - For Presentation SOP Class
|
119
|
+
1.2.840.10008.5.1.4.1.1.1.3.1 Digital Intra-oral X-Ray Image Storage - For Processing SOP Class
|
120
|
+
1.2.840.10008.5.1.4.1.1.2 CT Image Storage SOP Class
|
121
|
+
1.2.840.10008.5.1.4.1.1.2.1 Enhanced CT Image Storage SOP Class
|
122
|
+
1.2.840.10008.5.1.4.1.1.3 Ultrasound Multi-frame Image Storage (Retired) SOP Class R
|
123
|
+
1.2.840.10008.5.1.4.1.1.3.1 Ultrasound Multi-frame Image Storage SOP Class
|
124
|
+
1.2.840.10008.5.1.4.1.1.4 MR Image Storage SOP Class
|
125
|
+
1.2.840.10008.5.1.4.1.1.4.1 Enhanced MR Image Storage SOP Class
|
126
|
+
1.2.840.10008.5.1.4.1.1.4.2 MR Spectroscopy Storage SOP Class
|
127
|
+
1.2.840.10008.5.1.4.1.1.4.3 Enhanced MR Color Image Storage SOP Class
|
128
|
+
1.2.840.10008.5.1.4.1.1.5 Nuclear Medicine Image Storage (Retired) SOP Class R
|
129
|
+
1.2.840.10008.5.1.4.1.1.6 Ultrasound Image Storage (Retired) SOP Class R
|
130
|
+
1.2.840.10008.5.1.4.1.1.6.1 Ultrasound Image Storage SOP Class
|
131
|
+
1.2.840.10008.5.1.4.1.1.6.2 Enhanced US Volume Storage SOP Class
|
132
|
+
1.2.840.10008.5.1.4.1.1.7 Secondary Capture Image Storage SOP Class
|
133
|
+
1.2.840.10008.5.1.4.1.1.7.1 Multi-frame Single Bit Secondary Capture Image Storage SOP Class
|
134
|
+
1.2.840.10008.5.1.4.1.1.7.2 Multi-frame Grayscale Byte Secondary Capture Image Storage SOP Class
|
135
|
+
1.2.840.10008.5.1.4.1.1.7.3 Multi-frame Grayscale Word Secondary Capture Image Storage SOP Class
|
136
|
+
1.2.840.10008.5.1.4.1.1.7.4 Multi-frame True Color Secondary Capture Image Storage SOP Class
|
137
|
+
1.2.840.10008.5.1.4.1.1.8 Standalone Overlay Storage (Retired) SOP Class R
|
138
|
+
1.2.840.10008.5.1.4.1.1.9 Standalone Curve Storage (Retired) SOP Class R
|
139
|
+
1.2.840.10008.5.1.4.1.1.9.1 Waveform Storage - Trial (Retired) SOP Class R
|
140
|
+
1.2.840.10008.5.1.4.1.1.9.1.1 12-lead ECG Waveform Storage SOP Class
|
141
|
+
1.2.840.10008.5.1.4.1.1.9.1.2 General ECG Waveform Storage SOP Class
|
142
|
+
1.2.840.10008.5.1.4.1.1.9.1.3 Ambulatory ECG Waveform Storage SOP Class
|
143
|
+
1.2.840.10008.5.1.4.1.1.9.2.1 Hemodynamic Waveform Storage SOP Class
|
144
|
+
1.2.840.10008.5.1.4.1.1.9.3.1 Cardiac Electrophysiology Waveform Storage SOP Class
|
145
|
+
1.2.840.10008.5.1.4.1.1.9.4.1 Basic Voice Audio Waveform Storage SOP Class
|
146
|
+
1.2.840.10008.5.1.4.1.1.9.4.2 General Audio Waveform Storage SOP Class
|
147
|
+
1.2.840.10008.5.1.4.1.1.9.5.1 Arterial Pulse Waveform Storage SOP Class
|
148
|
+
1.2.840.10008.5.1.4.1.1.9.6.1 Respiratory Waveform Storage SOP Class
|
149
|
+
1.2.840.10008.5.1.4.1.1.10 Standalone Modality LUT Storage (Retired) SOP Class R
|
150
|
+
1.2.840.10008.5.1.4.1.1.11 Standalone VOI LUT Storage (Retired) SOP Class R
|
151
|
+
1.2.840.10008.5.1.4.1.1.11.1 Grayscale Softcopy Presentation State Storage SOP Class SOP Class
|
152
|
+
1.2.840.10008.5.1.4.1.1.11.2 Color Softcopy Presentation State Storage SOP Class SOP Class
|
153
|
+
1.2.840.10008.5.1.4.1.1.11.3 Pseudo-Color Softcopy Presentation State Storage SOP Class SOP Class
|
154
|
+
1.2.840.10008.5.1.4.1.1.11.4 Blending Softcopy Presentation State Storage SOP Class SOP Class
|
155
|
+
1.2.840.10008.5.1.4.1.1.11.5 XA/XRF Grayscale Softcopy Presentation State Storage SOP Class
|
156
|
+
1.2.840.10008.5.1.4.1.1.12.1 X-Ray Angiographic Image Storage SOP Class
|
157
|
+
1.2.840.10008.5.1.4.1.1.12.1.1 Enhanced XA Image Storage SOP Class
|
158
|
+
1.2.840.10008.5.1.4.1.1.12.2 X-Ray Radiofluoroscopic Image Storage SOP Class
|
159
|
+
1.2.840.10008.5.1.4.1.1.12.2.1 Enhanced XRF Image Storage SOP Class
|
160
|
+
1.2.840.10008.5.1.4.1.1.12.3 X-Ray Angiographic Bi-Plane Image Storage (Retired) SOP Class R
|
161
|
+
1.2.840.10008.5.1.4.1.1.13.1.1 X-Ray 3D Angiographic Image Storage SOP Class
|
162
|
+
1.2.840.10008.5.1.4.1.1.13.1.2 X-Ray 3D Craniofacial Image Storage SOP Class
|
163
|
+
1.2.840.10008.5.1.4.1.1.13.1.3 Breast Tomosynthesis Image Storage SOP Class
|
164
|
+
1.2.840.10008.5.1.4.1.1.14.1 Intravascular Optical Coherence Tomography Image Storage - For Presentation SOP Class
|
165
|
+
1.2.840.10008.5.1.4.1.1.14.2 Intravascular Optical Coherence Tomography Image Storage - For Processing SOP Class
|
166
|
+
1.2.840.10008.5.1.4.1.1.20 Nuclear Medicine Image Storage SOP Class
|
167
|
+
1.2.840.10008.5.1.4.1.1.66 Raw Data Storage SOP Class
|
168
|
+
1.2.840.10008.5.1.4.1.1.66.1 Spatial Registration Storage SOP Class
|
169
|
+
1.2.840.10008.5.1.4.1.1.66.2 Spatial Fiducials Storage SOP Class
|
170
|
+
1.2.840.10008.5.1.4.1.1.66.3 Deformable Spatial Registration Storage SOP Class
|
171
|
+
1.2.840.10008.5.1.4.1.1.66.4 Segmentation Storage SOP Class
|
172
|
+
1.2.840.10008.5.1.4.1.1.66.5 Surface Segmentation Storage SOP Class
|
173
|
+
1.2.840.10008.5.1.4.1.1.67 Real World Value Mapping Storage SOP Class
|
174
|
+
1.2.840.10008.5.1.4.1.1.77.1 VL Image Storage - Trial (Retired) R
|
175
|
+
1.2.840.10008.5.1.4.1.1.77.2 VL Multi-frame Image Storage - Trial (Retired) R
|
176
|
+
1.2.840.10008.5.1.4.1.1.77.1.1 VL Endoscopic Image Storage SOP Class
|
177
|
+
1.2.840.10008.5.1.4.1.1.77.1.1.1 Video Endoscopic Image Storage SOP Class
|
178
|
+
1.2.840.10008.5.1.4.1.1.77.1.2 VL Microscopic Image Storage SOP Class
|
179
|
+
1.2.840.10008.5.1.4.1.1.77.1.2.1 Video Microscopic Image Storage SOP Class
|
180
|
+
1.2.840.10008.5.1.4.1.1.77.1.3 VL Slide-Coordinates Microscopic Image Storage SOP Class
|
181
|
+
1.2.840.10008.5.1.4.1.1.77.1.4 VL Photographic Image Storage SOP Class
|
182
|
+
1.2.840.10008.5.1.4.1.1.77.1.4.1 Video Photographic Image Storage SOP Class
|
183
|
+
1.2.840.10008.5.1.4.1.1.77.1.5.1 Ophthalmic Photography 8 Bit Image Storage SOP Class
|
184
|
+
1.2.840.10008.5.1.4.1.1.77.1.5.2 Ophthalmic Photography 16 Bit Image Storage SOP Class
|
185
|
+
1.2.840.10008.5.1.4.1.1.77.1.5.3 Stereometric Relationship Storage SOP Class
|
186
|
+
1.2.840.10008.5.1.4.1.1.77.1.5.4 Ophthalmic Tomography Image Storage SOP Class
|
187
|
+
1.2.840.10008.5.1.4.1.1.77.1.6 VL Whole Slide Microscopy Image Storage SOP Class
|
188
|
+
1.2.840.10008.5.1.4.1.1.78.1 Lensometry Measurements Storage SOP Class
|
189
|
+
1.2.840.10008.5.1.4.1.1.78.2 Autorefraction Measurements Storage SOP Class
|
190
|
+
1.2.840.10008.5.1.4.1.1.78.3 Keratometry Measurements Storage SOP Class
|
191
|
+
1.2.840.10008.5.1.4.1.1.78.4 Subjective Refraction Measurements Storage SOP Class
|
192
|
+
1.2.840.10008.5.1.4.1.1.78.5 Visual Acuity Measurements Storage SOP Class
|
193
|
+
1.2.840.10008.5.1.4.1.1.78.6 Spectacle Prescription Report Storage SOP Class
|
194
|
+
1.2.840.10008.5.1.4.1.1.78.7 Ophthalmic Axial Measurements Storage SOP Class
|
195
|
+
1.2.840.10008.5.1.4.1.1.78.8 Intraocular Lens Calculations Storage SOP Class
|
196
|
+
1.2.840.10008.5.1.4.1.1.79.1 Macular Grid Thickness and Volume Report Storage SOP Class
|
197
|
+
1.2.840.10008.5.1.4.1.1.80.1 Ophthalmic Visual Field Static Perimetry Measurements Storage SOP Class
|
198
|
+
1.2.840.10008.5.1.4.1.1.88.1 Text SR Storage - Trial (Retired) SOP Class R
|
199
|
+
1.2.840.10008.5.1.4.1.1.88.2 Audio SR Storage - Trial (Retired) SOP Class R
|
200
|
+
1.2.840.10008.5.1.4.1.1.88.3 Detail SR Storage - Trial (Retired) SOP Class R
|
201
|
+
1.2.840.10008.5.1.4.1.1.88.4 Comprehensive SR Storage - Trial (Retired) SOP Class R
|
202
|
+
1.2.840.10008.5.1.4.1.1.88.11 Basic Text SR Storage SOP Class
|
203
|
+
1.2.840.10008.5.1.4.1.1.88.22 Enhanced SR Storage SOP Class
|
204
|
+
1.2.840.10008.5.1.4.1.1.88.33 Comprehensive SR Storage SOP Class
|
205
|
+
1.2.840.10008.5.1.4.1.1.88.40 Procedure Log Storage SOP Class
|
206
|
+
1.2.840.10008.5.1.4.1.1.88.50 Mammography CAD SR Storage SOP Class
|
207
|
+
1.2.840.10008.5.1.4.1.1.88.59 Key Object Selection Document Storage SOP Class
|
208
|
+
1.2.840.10008.5.1.4.1.1.88.65 Chest CAD SR Storage SOP Class
|
209
|
+
1.2.840.10008.5.1.4.1.1.88.67 X-Ray Radiation Dose SR Storage SOP Class
|
210
|
+
1.2.840.10008.5.1.4.1.1.88.69 Colon CAD SR Storage SOP Class
|
211
|
+
1.2.840.10008.5.1.4.1.1.88.70 Implantation Plan SR Storage SOP Class
|
212
|
+
1.2.840.10008.5.1.4.1.1.104.1 Encapsulated PDF Storage SOP Class
|
213
|
+
1.2.840.10008.5.1.4.1.1.104.2 Encapsulated CDA Storage SOP Class
|
214
|
+
1.2.840.10008.5.1.4.1.1.128 Positron Emission Tomography Image Storage SOP Class
|
215
|
+
1.2.840.10008.5.1.4.1.1.129 Standalone PET Curve Storage (Retired) SOP Class R
|
216
|
+
1.2.840.10008.5.1.4.1.1.130 Enhanced PET Image Storage SOP Class
|
217
|
+
1.2.840.10008.5.1.4.1.1.131 Basic Structured Display Storage SOP Class
|
218
|
+
1.2.840.10008.5.1.4.1.1.481.1 RT Image Storage SOP Class
|
219
|
+
1.2.840.10008.5.1.4.1.1.481.2 RT Dose Storage SOP Class
|
220
|
+
1.2.840.10008.5.1.4.1.1.481.3 RT Structure Set Storage SOP Class
|
221
|
+
1.2.840.10008.5.1.4.1.1.481.4 RT Beams Treatment Record Storage SOP Class
|
222
|
+
1.2.840.10008.5.1.4.1.1.481.5 RT Plan Storage SOP Class
|
223
|
+
1.2.840.10008.5.1.4.1.1.481.6 RT Brachy Treatment Record Storage SOP Class
|
224
|
+
1.2.840.10008.5.1.4.1.1.481.7 RT Treatment Summary Record Storage SOP Class
|
225
|
+
1.2.840.10008.5.1.4.1.1.481.8 RT Ion Plan Storage SOP Class
|
226
|
+
1.2.840.10008.5.1.4.1.1.481.9 RT Ion Beams Treatment Record Storage SOP Class
|
227
|
+
1.2.840.10008.5.1.4.1.1.501.1 DICOS CT Image Storage SOP Class
|
228
|
+
1.2.840.10008.5.1.4.1.1.501.2.1 DICOS Digital X-Ray Image Storage - For Presentation SOP Class
|
229
|
+
1.2.840.10008.5.1.4.1.1.501.2.2 DICOS Digital X-Ray Image Storage - For Processing SOP Class
|
230
|
+
1.2.840.10008.5.1.4.1.1.501.3 DICOS Threat Detection Report Storage SOP Class
|
231
|
+
1.2.840.10008.5.1.4.1.1.601.1 Eddy Current Image Storage SOP Class
|
232
|
+
1.2.840.10008.5.1.4.1.1.601.2 Eddy Current Multi-frame Image Storage SOP Class
|
233
|
+
1.2.840.10008.5.1.4.1.2.1.1 Patient Root Query/Retrieve Information Model - FIND SOP Class
|
234
|
+
1.2.840.10008.5.1.4.1.2.1.2 Patient Root Query/Retrieve Information Model - MOVE SOP Class
|
235
|
+
1.2.840.10008.5.1.4.1.2.1.3 Patient Root Query/Retrieve Information Model - GET SOP Class
|
236
|
+
1.2.840.10008.5.1.4.1.2.2.1 Study Root Query/Retrieve Information Model - FIND SOP Class
|
237
|
+
1.2.840.10008.5.1.4.1.2.2.2 Study Root Query/Retrieve Information Model - MOVE SOP Class
|
238
|
+
1.2.840.10008.5.1.4.1.2.2.3 Study Root Query/Retrieve Information Model - GET SOP Class
|
239
|
+
1.2.840.10008.5.1.4.1.2.3.1 Patient/Study Only Query/Retrieve Information Model - FIND (Retired) SOP Class R
|
240
|
+
1.2.840.10008.5.1.4.1.2.3.2 Patient/Study Only Query/Retrieve Information Model - MOVE (Retired) SOP Class R
|
241
|
+
1.2.840.10008.5.1.4.1.2.3.3 Patient/Study Only Query/Retrieve Information Model - GET (Retired) SOP Class R
|
242
|
+
1.2.840.10008.5.1.4.1.2.4.2 Composite Instance Root Retrieve - MOVE SOP Class
|
243
|
+
1.2.840.10008.5.1.4.1.2.4.3 Composite Instance Root Retrieve - GET SOP Class
|
244
|
+
1.2.840.10008.5.1.4.1.2.5.3 Composite Instance Retrieve Without Bulk Data - GET SOP Class
|
245
|
+
1.2.840.10008.5.1.4.31 Modality Worklist Information Model - FIND SOP Class
|
246
|
+
1.2.840.10008.5.1.4.32.1 General Purpose Worklist Information Model - FIND SOP Class
|
247
|
+
1.2.840.10008.5.1.4.32.2 General Purpose Scheduled Procedure Step SOP Class SOP Class
|
248
|
+
1.2.840.10008.5.1.4.32.3 General Purpose Performed Procedure Step SOP Class SOP Class
|
249
|
+
1.2.840.10008.5.1.4.32 General Purpose Worklist Management Meta SOP Class Meta SOP Class
|
250
|
+
1.2.840.10008.5.1.4.33 Instance Availability Notification SOP Class SOP Class
|
251
|
+
1.2.840.10008.5.1.4.34.1 RT Beams Delivery Instruction Storage - Trial (Retired) SOP Class R
|
252
|
+
1.2.840.10008.5.1.4.34.2 RT Conventional Machine Verification - Trial (Retired) SOP Class R
|
253
|
+
1.2.840.10008.5.1.4.34.3 RT Ion Machine Verification - Trial (Retired) SOP Class R
|
254
|
+
1.2.840.10008.5.1.4.34.4 Unified Worklist and Procedure Step Service Class - Trial (Retired) Service Class R
|
255
|
+
1.2.840.10008.5.1.4.34.4.1 Unified Procedure Step - Push SOP Class - Trial (Retired) SOP Class R
|
256
|
+
1.2.840.10008.5.1.4.34.4.2 Unified Procedure Step - Watch SOP Class - Trial (Retired) SOP Class R
|
257
|
+
1.2.840.10008.5.1.4.34.4.3 Unified Procedure Step - Pull SOP Class - Trial (Retired) SOP Class R
|
258
|
+
1.2.840.10008.5.1.4.34.4.4 Unified Procedure Step - Event SOP Class - Trial (Retired) SOP Class R
|
259
|
+
1.2.840.10008.5.1.4.34.5 Unified Worklist and Procedure Step SOP Instance Well-known SOP Instance
|
260
|
+
1.2.840.10008.5.1.4.34.6 Unified Worklist and Procedure Step Service Class Service Class
|
261
|
+
1.2.840.10008.5.1.4.34.6.1 Unified Procedure Step - Push SOP Class SOP Class
|
262
|
+
1.2.840.10008.5.1.4.34.6.2 Unified Procedure Step - Watch SOP Class SOP Class
|
263
|
+
1.2.840.10008.5.1.4.34.6.3 Unified Procedure Step - Pull SOP Class SOP Class
|
264
|
+
1.2.840.10008.5.1.4.34.6.4 Unified Procedure Step - Event SOP Class SOP Class
|
265
|
+
1.2.840.10008.5.1.4.34.7 RT Beams Delivery Instruction Storage SOP Class
|
266
|
+
1.2.840.10008.5.1.4.34.8 RT Conventional Machine Verification SOP Class
|
267
|
+
1.2.840.10008.5.1.4.34.9 RT Ion Machine Verification SOP Class
|
268
|
+
1.2.840.10008.5.1.4.37.1 General Relevant Patient Information Query SOP Class
|
269
|
+
1.2.840.10008.5.1.4.37.2 Breast Imaging Relevant Patient Information Query SOP Class
|
270
|
+
1.2.840.10008.5.1.4.37.3 Cardiac Relevant Patient Information Query SOP Class
|
271
|
+
1.2.840.10008.5.1.4.38.1 Hanging Protocol Storage SOP Class
|
272
|
+
1.2.840.10008.5.1.4.38.2 Hanging Protocol Information Model - FIND SOP Class
|
273
|
+
1.2.840.10008.5.1.4.38.3 Hanging Protocol Information Model - MOVE SOP Class
|
274
|
+
1.2.840.10008.5.1.4.38.4 Hanging Protocol Information Model - GET SOP Class
|
275
|
+
1.2.840.10008.5.1.4.39.1 Color Palette Storage Transfer
|
276
|
+
1.2.840.10008.5.1.4.39.2 Color Palette Information Model - FIND Query/Retrieve
|
277
|
+
1.2.840.10008.5.1.4.39.3 Color Palette Information Model - MOVE Query/Retrieve
|
278
|
+
1.2.840.10008.5.1.4.39.4 Color Palette Information Model - GET Query/Retrieve
|
279
|
+
1.2.840.10008.5.1.4.41 Product Characteristics Query SOP Class SOP Class
|
280
|
+
1.2.840.10008.5.1.4.42 Substance Approval Query SOP Class SOP Class
|
281
|
+
1.2.840.10008.5.1.4.43.1 Generic Implant Template Storage SOP Class
|
282
|
+
1.2.840.10008.5.1.4.43.2 Generic Implant Template Information Model - FIND SOP Class
|
283
|
+
1.2.840.10008.5.1.4.43.3 Generic Implant Template Information Model - MOVE SOP Class
|
284
|
+
1.2.840.10008.5.1.4.43.4 Generic Implant Template Information Model - GET SOP Class
|
285
|
+
1.2.840.10008.5.1.4.44.1 Implant Assembly Template Storage SOP Class
|
286
|
+
1.2.840.10008.5.1.4.44.2 Implant Assembly Template Information Model - FIND SOP Class
|
287
|
+
1.2.840.10008.5.1.4.44.3 Implant Assembly Template Information Model - MOVE SOP Class
|
288
|
+
1.2.840.10008.5.1.4.44.4 Implant Assembly Template Information Model - GET SOP Class
|
289
|
+
1.2.840.10008.5.1.4.45.1 Implant Template Group Storage SOP Class
|
290
|
+
1.2.840.10008.5.1.4.45.2 Implant Template Group Information Model - FIND SOP Class
|
291
|
+
1.2.840.10008.5.1.4.45.3 Implant Template Group Information Model - MOVE SOP Class
|
292
|
+
1.2.840.10008.5.1.4.45.4 Implant Template Group Information Model - GET SOP Class
|
293
|
+
1.2.840.10008.7.1.1 Native DICOM Model Application Hosting Model
|
294
|
+
1.2.840.10008.7.1.2 Abstract Multi-Dimensional Image Model Application Hosting Model
|
295
|
+
1.2.840.10008.15.0.3.1 dicomDeviceName LDAP OID
|
296
|
+
1.2.840.10008.15.0.3.2 dicomDescription LDAP OID
|
297
|
+
1.2.840.10008.15.0.3.3 dicomManufacturer LDAP OID
|
298
|
+
1.2.840.10008.15.0.3.4 dicomManufacturerModelName LDAP OID
|
299
|
+
1.2.840.10008.15.0.3.5 dicomSoftwareVersion LDAP OID
|
300
|
+
1.2.840.10008.15.0.3.6 dicomVendorData LDAP OID
|
301
|
+
1.2.840.10008.15.0.3.7 dicomAETitle LDAP OID
|
302
|
+
1.2.840.10008.15.0.3.8 dicomNetworkConnectionReference LDAP OID
|
303
|
+
1.2.840.10008.15.0.3.9 dicomApplicationCluster LDAP OID
|
304
|
+
1.2.840.10008.15.0.3.10 dicomAssociationInitiator LDAP OID
|
305
|
+
1.2.840.10008.15.0.3.11 dicomAssociationAcceptor LDAP OID
|
306
|
+
1.2.840.10008.15.0.3.12 dicomHostname LDAP OID
|
307
|
+
1.2.840.10008.15.0.3.13 dicomPort LDAP OID
|
308
|
+
1.2.840.10008.15.0.3.14 dicomSOPClass LDAP OID
|
309
|
+
1.2.840.10008.15.0.3.15 dicomTransferRole LDAP OID
|
310
|
+
1.2.840.10008.15.0.3.16 dicomTransferSyntax LDAP OID
|
311
|
+
1.2.840.10008.15.0.3.17 dicomPrimaryDeviceType LDAP OID
|
312
|
+
1.2.840.10008.15.0.3.18 dicomRelatedDeviceReference LDAP OID
|
313
|
+
1.2.840.10008.15.0.3.19 dicomPreferredCalledAETitle LDAP OID
|
314
|
+
1.2.840.10008.15.0.3.20 dicomTLSCyphersuite LDAP OID
|
315
|
+
1.2.840.10008.15.0.3.21 dicomAuthorizedNodeCertificateReference LDAP OID
|
316
|
+
1.2.840.10008.15.0.3.22 dicomThisNodeCertificateReference LDAP OID
|
317
|
+
1.2.840.10008.15.0.3.23 dicomInstalled LDAP OID
|
318
|
+
1.2.840.10008.15.0.3.24 dicomStationName LDAP OID
|
319
|
+
1.2.840.10008.15.0.3.25 dicomDeviceSerialNumber LDAP OID
|
320
|
+
1.2.840.10008.15.0.3.26 dicomInstitutionName LDAP OID
|
321
|
+
1.2.840.10008.15.0.3.27 dicomInstitutionAddress LDAP OID
|
322
|
+
1.2.840.10008.15.0.3.28 dicomInstitutionDepartmentName LDAP OID
|
323
|
+
1.2.840.10008.15.0.3.29 dicomIssuerOfPatientID LDAP OID
|
324
|
+
1.2.840.10008.15.0.3.30 dicomPreferredCallingAETitle LDAP OID
|
325
|
+
1.2.840.10008.15.0.3.31 dicomSupportedCharacterSet LDAP OID
|
326
|
+
1.2.840.10008.15.0.4.1 dicomConfigurationRoot LDAP OID
|
327
|
+
1.2.840.10008.15.0.4.2 dicomDevicesRoot LDAP OID
|
328
|
+
1.2.840.10008.15.0.4.3 dicomUniqueAETitlesRegistryRoot LDAP OID
|
329
|
+
1.2.840.10008.15.0.4.4 dicomDevice LDAP OID
|
330
|
+
1.2.840.10008.15.0.4.5 dicomNetworkAE LDAP OID
|
331
|
+
1.2.840.10008.15.0.4.6 dicomNetworkConnection LDAP OID
|
332
|
+
1.2.840.10008.15.0.4.7 dicomUniqueAETitle LDAP OID
|
333
|
+
1.2.840.10008.15.0.4.8 dicomTransferCapability LDAP OID
|
334
|
+
1.2.840.10008.15.1.1 Universal Coordinated Time Synchronization Frame of Reference
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module DICOM
|
2
|
+
|
3
|
+
# This class handles the various Element types (data, file meta, directory structuring)
|
4
|
+
# found in the DICOM Data Dictionary.
|
5
|
+
#
|
6
|
+
class DictionaryElement
|
7
|
+
|
8
|
+
# The element's name, e.g. 'SOP Instance UID'.
|
9
|
+
attr_reader :name
|
10
|
+
# The element's retired status string, i.e. an empty string or 'R'.
|
11
|
+
attr_reader :retired
|
12
|
+
# The element's tag, e.g. '0010,0010'.
|
13
|
+
attr_reader :tag
|
14
|
+
# The element's value multiplicity, e.g. '1', '2-n'.
|
15
|
+
attr_reader :vm
|
16
|
+
# The element's value representations, e.g. ['UL'], ['US', 'SS'].
|
17
|
+
attr_reader :vrs
|
18
|
+
|
19
|
+
# Creates a new dictionary element.
|
20
|
+
#
|
21
|
+
# @param [String] tag the element's tag
|
22
|
+
# @param [String] name the element's name
|
23
|
+
# @param [Array<String>] vrs the element's value representation(s)
|
24
|
+
# @param [String] vm the element's value multiplicity
|
25
|
+
# @param [String] retired the element's retired status string
|
26
|
+
#
|
27
|
+
def initialize(tag, name, vrs, vm, retired)
|
28
|
+
@tag = tag
|
29
|
+
@name = name
|
30
|
+
@vrs = vrs
|
31
|
+
@vm = vm
|
32
|
+
@retired = retired
|
33
|
+
end
|
34
|
+
|
35
|
+
# Checks if the element is private by analyzing its tag string.
|
36
|
+
#
|
37
|
+
# @return [Boolean] true if the element is private, and false if not.
|
38
|
+
#
|
39
|
+
def private?
|
40
|
+
@tag.private?
|
41
|
+
end
|
42
|
+
|
43
|
+
# Converts the retired status string to a boolean.
|
44
|
+
#
|
45
|
+
# @return [Boolean] true if the element is retired, and false if not.
|
46
|
+
#
|
47
|
+
def retired?
|
48
|
+
@retired =~ /R/ ? true : false
|
49
|
+
end
|
50
|
+
|
51
|
+
# Extracts the first (default) value representation of the element's value representations.
|
52
|
+
#
|
53
|
+
# @return [String] the first value representation listed for this particular element
|
54
|
+
#
|
55
|
+
def vr
|
56
|
+
@vrs[0]
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
data/lib/dicom/element.rb
CHANGED
@@ -1,219 +1,279 @@
|
|
1
|
-
module DICOM
|
2
|
-
|
3
|
-
# The Element class handles information related to ordinary (non-parent) elementals (data elements).
|
4
|
-
#
|
5
|
-
class Element
|
6
|
-
|
7
|
-
# Include the Elemental mix-in module:
|
8
|
-
include Elemental
|
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
|
-
def ==(other)
|
91
|
-
if other.respond_to?(:to_element)
|
92
|
-
other.send(:state) == state
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
alias_method :eql?, :==
|
97
|
-
|
98
|
-
# Sets the binary string of a Element.
|
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
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
#
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
#
|
136
|
-
#
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
#
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
#
|
161
|
-
#
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
#
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
#
|
179
|
-
#
|
180
|
-
#
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
#
|
186
|
-
#
|
187
|
-
#
|
188
|
-
#
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
#
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
#
|
203
|
-
#
|
204
|
-
#
|
205
|
-
#
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
1
|
+
module DICOM
|
2
|
+
|
3
|
+
# The Element class handles information related to ordinary (non-parent) elementals (data elements).
|
4
|
+
#
|
5
|
+
class Element
|
6
|
+
|
7
|
+
# Include the Elemental mix-in module:
|
8
|
+
include Elemental
|
9
|
+
|
10
|
+
# Creates an Element instance.
|
11
|
+
#
|
12
|
+
# @note In the case where the Element is given a binary instead of value,
|
13
|
+
# the Element will not have a formatted value (value = nil).
|
14
|
+
# @note Private data elements are named as 'Private'.
|
15
|
+
# @note Non-private data elements that are not found in the dictionary are named as 'Unknown'.
|
16
|
+
#
|
17
|
+
# @param [String] tag a ruby-dicom type element tag string
|
18
|
+
# @param [String, Integer, Float, Array, NilClass] value a custom value to be encoded as the data element binary string, or in some cases (specified by options), a pre-encoded binary string
|
19
|
+
# @param [Hash] options the options to use for creating the element
|
20
|
+
#
|
21
|
+
# @option options [String] :bin if you already have the value pre-encoded to a binary string, the string can be supplied with this option to avoid it being encoded a second time
|
22
|
+
# @option options [Boolean] :encoded if the value parameter contains a pre-encoded binary, this boolean must to be set as true
|
23
|
+
# @option options [String] :name the name of the Element (if not specified, the name is retrieved from the dictionary)
|
24
|
+
# @option options [DObject, Item, NilClass] :parent a parent instance (Item or DObject) which the element belongs to
|
25
|
+
# @option options [String] :vr if a private element is created with a custom value, this must be specified to enable the encoding of the value (if not specified, the vr is retrieved from the dictionary)
|
26
|
+
#
|
27
|
+
# @example Create a new data element and connect it to a DObject instance
|
28
|
+
# patient_name = Element.new('0010,0010', 'John Doe', :parent => dcm)
|
29
|
+
# @example Create a "Pixel Data" element and insert image data that you have already encoded elsewhere
|
30
|
+
# pixel_data = Element.new('7FE0,0010', processed_pixel_data, :encoded => true, :parent => dcm)
|
31
|
+
# @example Create a private data element
|
32
|
+
# private = Element.new('0011,2102', some_data, :parent => dcm, :vr => 'LO')
|
33
|
+
#
|
34
|
+
def initialize(tag, value, options={})
|
35
|
+
raise ArgumentError, "The supplied tag (#{tag}) is not valid. The tag must be a string of the form 'GGGG,EEEE'." unless tag.is_a?(String) && tag.tag?
|
36
|
+
# Set instance variables:
|
37
|
+
@tag = tag.upcase
|
38
|
+
# We may beed to retrieve name and vr from the library:
|
39
|
+
if options[:name] and options[:vr]
|
40
|
+
@name = options[:name]
|
41
|
+
@vr = options[:vr].upcase
|
42
|
+
else
|
43
|
+
name, vr = LIBRARY.name_and_vr(tag)
|
44
|
+
@name = options[:name] || name
|
45
|
+
@vr = (options[:vr] ? options[:vr].upcase : vr)
|
46
|
+
end
|
47
|
+
# Manage the parent relation if specified:
|
48
|
+
if options[:parent]
|
49
|
+
@parent = options[:parent]
|
50
|
+
# FIXME: Because of some implementation problems, attaching the special
|
51
|
+
# Data Set Trailing Padding element to a parent is not supported yet!
|
52
|
+
@parent.add(self, :no_follow => true) unless @tag == 'FFFC,FFFC' && @parent.is_a?(Sequence)
|
53
|
+
end
|
54
|
+
# Value may in some cases be the binary string:
|
55
|
+
unless options[:encoded]
|
56
|
+
# The Data Element may have a value, have no value and no binary, or have no value and only binary:
|
57
|
+
if value
|
58
|
+
# Is binary value provided or do we need to encode it?
|
59
|
+
if options[:bin]
|
60
|
+
@value = value
|
61
|
+
@bin = options[:bin]
|
62
|
+
else
|
63
|
+
if value == ''
|
64
|
+
@value = value
|
65
|
+
@bin = ''
|
66
|
+
else
|
67
|
+
# Set the value with our custom setter method to get proper encoding:
|
68
|
+
self.value = value
|
69
|
+
end
|
70
|
+
end
|
71
|
+
else
|
72
|
+
# When no value is present, we set the binary as an empty string, unless the binary is specified:
|
73
|
+
@bin = options[:bin] || ''
|
74
|
+
end
|
75
|
+
else
|
76
|
+
@bin = value
|
77
|
+
end
|
78
|
+
# Let the binary decide the length:
|
79
|
+
@length = @bin.length
|
80
|
+
end
|
81
|
+
|
82
|
+
# Checks for equality.
|
83
|
+
#
|
84
|
+
# Other and self are considered equivalent if they are
|
85
|
+
# of compatible types and their attributes are equivalent.
|
86
|
+
#
|
87
|
+
# @param other an object to be compared with self.
|
88
|
+
# @return [Boolean] true if self and other are considered equivalent
|
89
|
+
#
|
90
|
+
def ==(other)
|
91
|
+
if other.respond_to?(:to_element)
|
92
|
+
other.send(:state) == state
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
alias_method :eql?, :==
|
97
|
+
|
98
|
+
# Sets the binary string of a Element.
|
99
|
+
#
|
100
|
+
# @note if the specified binary has an odd length, a proper pad byte will automatically be appended
|
101
|
+
# to give it an even length (which is needed to conform with the DICOM standard).
|
102
|
+
#
|
103
|
+
# @param [String] new_bin a binary string of encoded data
|
104
|
+
#
|
105
|
+
def bin=(new_bin)
|
106
|
+
raise ArgumentError, "Expected String, got #{new_bin.class}." unless new_bin.is_a?(String)
|
107
|
+
# Add a zero byte at the end if the length of the binary is odd:
|
108
|
+
if new_bin.length.odd?
|
109
|
+
@bin = new_bin + stream.pad_byte[@vr]
|
110
|
+
else
|
111
|
+
@bin = new_bin
|
112
|
+
end
|
113
|
+
@value = nil
|
114
|
+
@length = @bin.length
|
115
|
+
end
|
116
|
+
|
117
|
+
# Checks if the Element actually has any child elementals.
|
118
|
+
#
|
119
|
+
# @return [FalseClass] always returns false, as Element instances by definition can't have children
|
120
|
+
#
|
121
|
+
def children?
|
122
|
+
return false
|
123
|
+
end
|
124
|
+
|
125
|
+
# Gives the endianness of the encoded binary value of this element.
|
126
|
+
#
|
127
|
+
# @return [Boolean] false if little endian, true if big endian
|
128
|
+
#
|
129
|
+
def endian
|
130
|
+
return stream.str_endian
|
131
|
+
end
|
132
|
+
|
133
|
+
# Computes a hash code for this object.
|
134
|
+
#
|
135
|
+
# @note Two objects with the same attributes will have the same hash code.
|
136
|
+
#
|
137
|
+
# @return [Fixnum] the object's hash code
|
138
|
+
#
|
139
|
+
def hash
|
140
|
+
state.hash
|
141
|
+
end
|
142
|
+
|
143
|
+
# Gives a string containing a human-readable hash representation of the Element.
|
144
|
+
#
|
145
|
+
# @return [String] a hash representation string of the element
|
146
|
+
#
|
147
|
+
def inspect
|
148
|
+
to_hash.inspect
|
149
|
+
end
|
150
|
+
|
151
|
+
# Checks if the Element is a parent.
|
152
|
+
#
|
153
|
+
# @return [FalseClass] always returns false, as Element instances by definition are not parents
|
154
|
+
#
|
155
|
+
def is_parent?
|
156
|
+
return false
|
157
|
+
end
|
158
|
+
|
159
|
+
# Creates a hash representation of the element instance.
|
160
|
+
#
|
161
|
+
# @note The key representation in this hash is configurable
|
162
|
+
# (refer to the DICOM module methods documentation for more details).
|
163
|
+
# @return [Hash] a hash containing a key & value pair (e.g. {"Modality"=>"MR"})
|
164
|
+
#
|
165
|
+
def to_hash
|
166
|
+
return {self.send(DICOM.key_representation) => value}
|
167
|
+
end
|
168
|
+
|
169
|
+
# Returns self.
|
170
|
+
#
|
171
|
+
# @return [Element] self
|
172
|
+
#
|
173
|
+
def to_element
|
174
|
+
self
|
175
|
+
end
|
176
|
+
|
177
|
+
# Gives a json string containing a human-readable representation of the Element.
|
178
|
+
#
|
179
|
+
# @return [String] a string containing a key & value pair (e.g. "{\"Modality\":\"MR\"}")
|
180
|
+
#
|
181
|
+
def to_json
|
182
|
+
to_hash.to_json
|
183
|
+
end
|
184
|
+
|
185
|
+
# Gives a yaml string containing a human-readable representation of the Element.
|
186
|
+
#
|
187
|
+
# @return [String] a string containing a key & value pair (e.g. "---\nModality: MR\n")
|
188
|
+
#
|
189
|
+
def to_yaml
|
190
|
+
to_hash.to_yaml
|
191
|
+
end
|
192
|
+
|
193
|
+
# Gives the (decoded) value of the data element.
|
194
|
+
#
|
195
|
+
# @note Returned string values are automatically converted from their originally
|
196
|
+
# encoding (e.g. ISO8859-1 or ASCII-8BIT) to UTF-8 for convenience reasons.
|
197
|
+
# If the value string is wanted in its original encoding, extract the data
|
198
|
+
# element's bin attribute instead.
|
199
|
+
#
|
200
|
+
# @note Note that according to the DICOM Standard PS 3.5 C.12.1.1.2, the Character Set only applies
|
201
|
+
# to values of data elements of type SH, LO, ST, PN, LT or UT. Currently in ruby-dicom, all
|
202
|
+
# string values are encoding converted regardless of VR, but whether this causes any problems is uknown.
|
203
|
+
#
|
204
|
+
# @return [String, Integer, Float] the formatted element value
|
205
|
+
#
|
206
|
+
def value
|
207
|
+
if @value.is_a?(String)
|
208
|
+
# Unless this is actually the Character Set data element,
|
209
|
+
# get the character set (note that it may not be available):
|
210
|
+
character_set = (@tag != '0008,0005' && top_parent.is_a?(DObject)) ? top_parent.value('0008,0005') : nil
|
211
|
+
# Convert to UTF-8 from [original encoding]:
|
212
|
+
# In most cases the original encoding is IS0-8859-1 (ISO_IR 100), but if
|
213
|
+
# it is not specified in the DICOM object, or if the specified string
|
214
|
+
# is not recognized, ASCII-8BIT is assumed.
|
215
|
+
@value.encode('UTF-8', ENCODING_NAME[character_set] || 'ASCII-8BIT')
|
216
|
+
# If unpleasant encoding exceptions occur, the below version may be considered:
|
217
|
+
#@value.encode('UTF-8', ENCODING_NAME[character_set] || 'ASCII-8BIT', :invalid => :replace, :undef => :replace)
|
218
|
+
else
|
219
|
+
@value
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
# Sets the value of the Element instance.
|
224
|
+
#
|
225
|
+
# In addition to updating the value attribute, the specified value is encoded to binary
|
226
|
+
# and used to update the Element's bin and length attributes too.
|
227
|
+
#
|
228
|
+
# @note The specified value must be of a type that is compatible with the Element's value representation (vr).
|
229
|
+
# @param [String, Integer, Float, Array] new_value a formatted value that is assigned to the element
|
230
|
+
#
|
231
|
+
def value=(new_value)
|
232
|
+
conversion = VALUE_CONVERSION[@vr] || :to_s
|
233
|
+
if conversion == :to_s
|
234
|
+
# Unless this is actually the Character Set data element,
|
235
|
+
# get the character set (note that it may not be available):
|
236
|
+
character_set = (@tag != '0008,0005' && top_parent.is_a?(DObject)) ? top_parent.value('0008,0005') : nil
|
237
|
+
# Convert to [DObject encoding] from [input string encoding]:
|
238
|
+
# In most cases the DObject encoding is IS0-8859-1 (ISO_IR 100), but if
|
239
|
+
# it is not specified in the DICOM object, or if the specified string
|
240
|
+
# is not recognized, ASCII-8BIT is assumed.
|
241
|
+
@value = new_value.to_s.encode(ENCODING_NAME[character_set] || 'ASCII-8BIT', new_value.to_s.encoding.name)
|
242
|
+
@bin = encode(@value)
|
243
|
+
else
|
244
|
+
# We may have an array (of numbers) which needs to be passed directly to
|
245
|
+
# the encode method instead of being forced into a numerical:
|
246
|
+
if new_value.is_a?(Array)
|
247
|
+
@value = new_value
|
248
|
+
@bin = encode(@value)
|
249
|
+
else
|
250
|
+
@value = new_value.send(conversion)
|
251
|
+
@bin = encode(@value)
|
252
|
+
end
|
253
|
+
end
|
254
|
+
@length = @bin.length
|
255
|
+
end
|
256
|
+
|
257
|
+
|
258
|
+
private
|
259
|
+
|
260
|
+
|
261
|
+
# Encodes a formatted value to a binary string.
|
262
|
+
#
|
263
|
+
# @param [String, Integer, Float, Array] formatted_value a formatted value
|
264
|
+
# @return [String] the encoded, binary string
|
265
|
+
#
|
266
|
+
def encode(formatted_value)
|
267
|
+
stream.encode_value(formatted_value, @vr)
|
268
|
+
end
|
269
|
+
|
270
|
+
# Collects the attributes of this instance.
|
271
|
+
#
|
272
|
+
# @return [Array<String>] an array of attributes
|
273
|
+
#
|
274
|
+
def state
|
275
|
+
[@tag, @vr, @value, @bin]
|
276
|
+
end
|
277
|
+
|
278
|
+
end
|
219
279
|
end
|