dicom 0.6.1 → 0.7
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +42 -20
- data/DOCUMENTATION +117 -71
- data/README +3 -3
- data/lib/dicom.rb +23 -12
- data/lib/{Anonymizer.rb → dicom/Anonymizer.rb} +101 -79
- data/lib/{DClient.rb → dicom/DClient.rb} +12 -11
- data/lib/{DLibrary.rb → dicom/DLibrary.rb} +53 -31
- data/lib/dicom/DObject.rb +1579 -0
- data/lib/{DRead.rb → dicom/DRead.rb} +42 -43
- data/lib/{DServer.rb → dicom/DServer.rb} +34 -20
- data/lib/{DWrite.rb → dicom/DWrite.rb} +27 -31
- data/lib/{Dictionary.rb → dicom/Dictionary.rb} +434 -32
- data/lib/dicom/FileHandler.rb +50 -0
- data/lib/{Link.rb → dicom/Link.rb} +312 -167
- data/lib/{Stream.rb → dicom/Stream.rb} +1 -1
- data/lib/dicom/ruby_extensions.rb +47 -0
- metadata +16 -15
- data/lib/DObject.rb +0 -1194
- data/lib/ruby_extensions.rb +0 -36
data/CHANGELOG
CHANGED
@@ -1,3 +1,35 @@
|
|
1
|
+
= 0.7
|
2
|
+
|
3
|
+
=== 28th February, 2010
|
4
|
+
|
5
|
+
* Added set_image() and set_image_narray() methods to write pixel data to the DICOM object, complementing set_image_magick().
|
6
|
+
* Added method get_image() which retrieves pixel data to a standard Ruby Array.
|
7
|
+
* Added a method for removing all private data elements in the DICOM object.
|
8
|
+
* Anonymizer class has gained the ability to remove all private data elements when anonymizing.
|
9
|
+
* Fixed an issue where Anonymizer failed to anonymize tags which had multiple instances in a DICOM file.
|
10
|
+
* Fixed an issue where Anonymizer failed to honor an expception folder if it ended with a file separation character.
|
11
|
+
* Private data elements can now be added to a DICOM object.
|
12
|
+
* Created a new FileHandler class where the user can customize the way incoming DICOM files are handled in DServer.
|
13
|
+
* Methods set_image_narray() and set_image_magick() takes options :min and :max to rescale pixel values.
|
14
|
+
* The magick and narray image retrieval methods now takes the option :rescale to convert pixel values to presentation values.
|
15
|
+
* Method get_pos() now takes the option :parent to narrow a search down.
|
16
|
+
* Improved the set_value() method to handle the creation of data elements inside sequences/items.
|
17
|
+
* All DObject methods who return Data Element positions now return an empty array instead of false if no matches are found.
|
18
|
+
* Improved handling of private tags in the library.
|
19
|
+
* Network transmissions with implicit encoding are now handled properly.
|
20
|
+
* Improved the handling of associations in the networking code.
|
21
|
+
* Some minor formatting improvements to the print() method.
|
22
|
+
* Improve the logic of updating group/sequence/item lengths to handle changes to Data Elements in sequence hierarchies.
|
23
|
+
* DLibrary class is permanently loaded when the gem is loaded and no longer needs to be specified by the user.
|
24
|
+
* Method get_image_magick() now handles pixel representation and window leveling.
|
25
|
+
* Program files was moved to a sub-directory and a module version string added, in accordance with gem guidelines.
|
26
|
+
* Renamed DObject attribute :types to :vr in accordance with the terminology of the official DICOM standard.
|
27
|
+
* Renamed method get_raw() to get_bin() and attribute :raw to :bin.
|
28
|
+
* Renamed get_pos() option :array to :selection.
|
29
|
+
* Updated Dictionary in accordance with the 2009 version of the official DICOM base standard.
|
30
|
+
* Various "under the hood" improvements and code cleanups.
|
31
|
+
|
32
|
+
|
1
33
|
= 0.6.1
|
2
34
|
|
3
35
|
=== 23rd August, 2009
|
@@ -36,8 +68,8 @@
|
|
36
68
|
See documentation for details.
|
37
69
|
* Several methods have been cleaned up, making execution in some cases somewhat snappier.
|
38
70
|
* Several methods have been made more robust.
|
39
|
-
* Added new
|
40
|
-
* Added new
|
71
|
+
* Added new option :partial to the get_pos() method, which will enable search for partial string matches.
|
72
|
+
* Added new option :array to the get_value() and get_raw() methods which enables easy extraction of
|
41
73
|
multiple values of a given tag to an array (relevant for tags present at multiple places in a DICOM file).
|
42
74
|
* Fixed a bug where exception folders where ignored in the Anonymizer class.
|
43
75
|
|
@@ -46,7 +78,7 @@
|
|
46
78
|
|
47
79
|
=== 3rd February, 2009
|
48
80
|
|
49
|
-
* Change of syntax:
|
81
|
+
* Change of syntax: Options are now supplied as hash.
|
50
82
|
* Method below() renamed to children().
|
51
83
|
* Added method parents() which returns the position of all items/sequences that are the parent of
|
52
84
|
the specified tag. This method is only relevant for DICOM tags that exist inside a hierarchy.
|
@@ -103,22 +135,12 @@ The library does have several known issues and lacks some features I would like
|
|
103
135
|
offer basic functionality and should be usable for people interested in working with DICOM files in Ruby.
|
104
136
|
The reading algorithm has been tested succesfully with some 40 different DICOM files, so it should be fairly robust.
|
105
137
|
|
106
|
-
Features:
|
107
|
-
* Reads DICOM files
|
108
|
-
* Retrieve tags, formatted
|
109
|
-
* Retrieve tags, unformatted
|
110
|
-
* Retrieve image data as NArray object
|
111
|
-
* Retrieve image data as RMagick object
|
112
|
-
* Print file properties
|
113
|
-
* Print tag information
|
114
|
-
|
115
138
|
|
116
139
|
Known issues:
|
117
|
-
*
|
118
|
-
*
|
119
|
-
*
|
120
|
-
*
|
121
|
-
*
|
122
|
-
*
|
123
|
-
*
|
124
|
-
* Retrieving images when file contains two or more unrelated images may not be handled correctly.
|
140
|
+
* The retrieve file network functionality (get_image() in DClient class) has not been tested.
|
141
|
+
* Compressed pixel data is poorly handled.
|
142
|
+
* Read/Write 12 bit image data not available.
|
143
|
+
* Color image data is poorly handled.
|
144
|
+
* Incomplete support for Big endian (Everything but signed short and signed long has been implemented).
|
145
|
+
* Incomplete support for multiple frame image data to NArray and RMagick objects (partial support already featured).
|
146
|
+
* Image handling does not take into consideration DICOM tags which specify orientation, samples per pixel and photometric interpretation.
|
data/DOCUMENTATION
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
DICOM is a small and simple library for handling DICOM files (reading, editing
|
1
|
+
Ruby DICOM is a small and simple library for handling DICOM files (reading, editing
|
2
2
|
and writing) and DICOM network communication (both client and server side).
|
3
3
|
It is written completely in Ruby and has no external dependencies.
|
4
4
|
|
5
|
-
Copyright 2008-
|
5
|
+
Copyright 2008-2010 Christoffer Lervåg (chris.lervag [@nospam] @gmail.com)
|
6
6
|
|
7
7
|
INSTALLATION
|
8
8
|
|
@@ -12,20 +12,6 @@ gem install dicom
|
|
12
12
|
|
13
13
|
DOCUMENTATION
|
14
14
|
|
15
|
-
CLASS DLibrary
|
16
|
-
|
17
|
-
PUBLIC CLASS METHODS
|
18
|
-
|
19
|
-
new()
|
20
|
-
|
21
|
-
Initialize a new Library (dictionary) object.
|
22
|
-
Useful if you want to make a script that reads hundreds or thousands of DICOM files,
|
23
|
-
because you can save time by loading the library one time at startup instead of
|
24
|
-
having the library being loaded for each DICOM file being read.
|
25
|
-
Example:
|
26
|
-
myLib = DICOM::DLibrary.new
|
27
|
-
|
28
|
-
|
29
15
|
CLASS DObject
|
30
16
|
|
31
17
|
PUBLIC CLASS METHODS
|
@@ -36,10 +22,10 @@ PUBLIC CLASS METHODS
|
|
36
22
|
Example 1: (The simplest way)
|
37
23
|
require 'dicom'
|
38
24
|
obj = DICOM::DObject.new("myFile.dcm")
|
39
|
-
Example 2: (
|
40
|
-
obj = DICOM::DObject.new(
|
41
|
-
Example 3: (Open an empty DICOM object)
|
42
|
-
obj = DICOM::DObject.new(nil)
|
25
|
+
Example 2: (Reading a DICOM file that has already been loaded into memory in a binary string)
|
26
|
+
obj = DICOM::DObject.new(bin_data, :bin => true, :syntax => syntax_string)
|
27
|
+
Example 3: (Open an empty DICOM object & choose non-verbose behaviour)
|
28
|
+
obj = DICOM::DObject.new(nil, :verbose => false)
|
43
29
|
|
44
30
|
ACCESSORS (read only)
|
45
31
|
:read_success
|
@@ -60,10 +46,10 @@ ACCESSORS (read only)
|
|
60
46
|
As such, their length is equal to the number of tags in a DICOM object.
|
61
47
|
:names
|
62
48
|
:tags
|
63
|
-
:
|
49
|
+
:vr
|
64
50
|
:lengths
|
65
51
|
:values
|
66
|
-
:
|
52
|
+
:bin
|
67
53
|
:levels
|
68
54
|
|
69
55
|
PUBLIC INSTANCE METHODS
|
@@ -78,26 +64,50 @@ PUBLIC INSTANCE METHODS
|
|
78
64
|
Example 2: (Return all element positions that is contained only directly beneath the following sequence)
|
79
65
|
pos = obj.children("3006,0082", :next_only => true)
|
80
66
|
|
67
|
+
get_bin(element, options={})
|
68
|
+
Returns the unprocessed, binary string of the requested DICOM data element.
|
69
|
+
Element may be an array index, element name or element tag.
|
70
|
+
If you wish to return multiple data values of a tag that occurs several times in the file,
|
71
|
+
use the keyword :array => true .
|
72
|
+
Example: (Returns all data values in a array)
|
73
|
+
contour_data = obj.get_bin("3006,0050", :array => true)
|
74
|
+
|
81
75
|
get_frames
|
82
76
|
Returns the number of frames present in the image data in the DICOM file.
|
83
77
|
|
84
|
-
|
78
|
+
get_image(options={})
|
79
|
+
Returns a standard Ruby array with the pixel data, where the length of the array corresponds
|
80
|
+
with the number of pixels in the image.
|
81
|
+
Example 1: (Retrieve the pixel data)
|
82
|
+
pixels = obj.get_image
|
83
|
+
Example 2: (Retrieve the pixel data rescaled to presentation values according to window center/width settings)
|
84
|
+
pixels = obj.get_image(:rescale => true)
|
85
|
+
Example 3: (Retrieve the rescaled pixel data and using a numerical array in the rescaling process (~2 times faster))
|
86
|
+
pixels = obj.get_image(:rescale => true, :narray => true)
|
87
|
+
|
88
|
+
get_image_magick(options={})
|
85
89
|
Returns an array of RMagick image objects, where the size of the array corresponds
|
86
90
|
with the number of frames in the image data.
|
87
91
|
To call this method the user needs to have loaded the RMagick bindings in advance (require 'RMagick').
|
88
|
-
Example (
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
92
|
+
Example 1: (Retrieve object and display first frame)
|
93
|
+
require 'RMagick'
|
94
|
+
images = obj.get_image_magick
|
95
|
+
images[0].display
|
96
|
+
Example 2: (Retrieve image object rescaled to presentation values according to window center/width settings)
|
97
|
+
images = obj.get_image_magick(:rescale => true)
|
98
|
+
Example 3: (Retrieve rescaled image object and using a numerical array in the rescaling process (~2 times faster))
|
99
|
+
images = obj.get_image_magick(:rescale => true, :narray => true)
|
100
|
+
|
101
|
+
get_image_narray(options={})
|
94
102
|
Returns a 3d NArray object where the array dimensions are related to [frames, columns, rows].
|
95
103
|
To call this method the user needs to have loaded the NArray library in advance (require 'narray').
|
96
|
-
Example (
|
104
|
+
Example 1: (Retrieve object and display first frame):
|
97
105
|
require 'narray'
|
98
106
|
require 'nimage'
|
99
|
-
data = obj.get_image_narray
|
107
|
+
data = obj.get_image_narray
|
100
108
|
NImage.show data[0,true,true]
|
109
|
+
Example 2: (Retrieve numerical array rescaled from the original pixel values to presentation values)
|
110
|
+
data = obj.get_image_narray(:rescale => true)
|
101
111
|
|
102
112
|
get_image_pos
|
103
113
|
Returns the index(es) of the data element(s) that contain image data.
|
@@ -108,22 +118,16 @@ PUBLIC INSTANCE METHODS
|
|
108
118
|
Example 1: (Find all occurences of the specified tag in the object)
|
109
119
|
pos = obj.get_pos("3006,0080")
|
110
120
|
Example 2: (Find all occurences of the specified tag inside the specified sequence)
|
111
|
-
|
112
|
-
pos = obj.get_pos("3006,0080", :
|
113
|
-
Example 3: (
|
121
|
+
mySelection = obj.children("3006,0082")
|
122
|
+
pos = obj.get_pos("3006,0080", :selection => mySelection)
|
123
|
+
Example 3: (Same as above, but slightly more concise using the :parent option)
|
124
|
+
pos = obj.get_pos("3006,0080", :parent => "3006,0082")
|
125
|
+
Example 4: (Using the :partial argument to find position of all elements containing a specific string)
|
114
126
|
pos = obj.get_pos("0010", :partial => true)
|
115
127
|
pos = obj.get_pos("Name", :partial => true)
|
116
128
|
|
117
|
-
get_raw(element, options={})
|
118
|
-
Returns the raw data of the requested DICOM data element.
|
119
|
-
Element may be an array index, element name or element tag.
|
120
|
-
If you wish to return multiple data values of a tag that occurs several times in the file,
|
121
|
-
use the keyword :array => true .
|
122
|
-
Example: (Returns all data values in a array)
|
123
|
-
contour_data = obj.get_raw("3006,0050", :array => true)
|
124
|
-
|
125
129
|
get_value(element)
|
126
|
-
Returns the value (processed
|
130
|
+
Returns the value (processed binary data) of the requested DICOM data element.
|
127
131
|
Element may be an array index, element name or element tag.
|
128
132
|
If you wish to return multiple values of a tag that occurs several times in the file,
|
129
133
|
use the keyword :array => true .
|
@@ -143,7 +147,7 @@ PUBLIC INSTANCE METHODS
|
|
143
147
|
|
144
148
|
print(pos, options={})
|
145
149
|
Prints the information gathered on one or several/all tag(s) in the DICOM object:
|
146
|
-
(index, [hierarchy level,] label, name,
|
150
|
+
(index, [hierarchy level,] label, name, vr, length, value)
|
147
151
|
The method can print to both screen or to a text file. If print to file is chosen,
|
148
152
|
the text file will be put in the folder of the original DICOM file with a '.txt' extension.
|
149
153
|
The argument pos may be a number (array position), an array of numbers, or true.
|
@@ -153,15 +157,51 @@ PUBLIC INSTANCE METHODS
|
|
153
157
|
obj.print([4,5,6])
|
154
158
|
|
155
159
|
print_all
|
156
|
-
Prints information of all tags stored in the DICOM object to the screen.
|
160
|
+
Prints information of all tags stored in the DICOM object to the screen (This is equal to using print(true)).
|
157
161
|
|
158
162
|
print_properties
|
159
163
|
Prints the key structural properties of the DICOM file to the screen.
|
160
164
|
|
161
|
-
remove(element)
|
165
|
+
remove(element, options={})
|
162
166
|
Removes the specified data element from the DICOM object. You can use this method
|
163
167
|
if you are editing a DICOM object and wants to get rid of one or more elements.
|
164
168
|
Element may be an array index, element name or element tag.
|
169
|
+
The default behaviour of this method is to remove any encapsulated elements if a sequence
|
170
|
+
or item is selected for removal. If for some reason you want to avoid this, user the :ignore_children option.
|
171
|
+
Example 1: (Remove a sequence tag along with all its 'children' tags)
|
172
|
+
obj.remove("Request Attributes Sequence")
|
173
|
+
Example 2: (Remove a specific sequence tag only (not recommended unless you really know what you are doing))
|
174
|
+
obj.remove("0040,0275", :ignore_children => true)
|
175
|
+
|
176
|
+
remove_private
|
177
|
+
Removes all private data elements from the DICOM object.
|
178
|
+
|
179
|
+
set_image(array)
|
180
|
+
Encodes and inserts the content of your array to the pixel data element of your DICOM object.
|
181
|
+
Note that this method does not create or update tags related to image information in the DICOM object.
|
182
|
+
|
183
|
+
set_image_file(file)
|
184
|
+
Inserts the binary content of a file to the Pixel Data tag in your DICOM object.
|
185
|
+
This can be useful if you have processed some image data using a custom program
|
186
|
+
and just wants to put that data back into a DICOM object.
|
187
|
+
|
188
|
+
set_image_magick(object, options={})
|
189
|
+
Encodes and inserts a RMagick image object to the pixel data element of your DICOM object.
|
190
|
+
Note that this method does not create or update tags related to image information in the DICOM object.
|
191
|
+
If pixel value rescaling is desired, this can be specified by using both the :min and :max options.
|
192
|
+
NB! Because of rescaling when importing pixel values to a RMagick object, and the possible
|
193
|
+
difference between presentation values and original pixel values, the use of set_image_magick() may
|
194
|
+
result in pixel data that is completely different from what is expected.
|
195
|
+
This method should be used only with great care: Do not be suprised if your resulting DICOM image looks strange!
|
196
|
+
Example: (Encode an image object and requesting a specific pixel value range to be encoded)
|
197
|
+
obj.set_image_magick(myImage, :min => -2000, :max => 3000)
|
198
|
+
|
199
|
+
set_image_narray(object, options={})
|
200
|
+
Encodes and inserts a NArray object to the pixel data element of your DICOM object.
|
201
|
+
Note that this method does not create or update tags related to image information in the DICOM object.
|
202
|
+
If pixel value rescaling is desired, this can be specified by using both the :min and :max options.
|
203
|
+
Example: (Encode a numerical pixel data array and requesting a specific pixel value range to be encoded)
|
204
|
+
obj.set_image_narray(myArray, :min => -2000, :max => 3000)
|
165
205
|
|
166
206
|
set_value(value, element, options={})
|
167
207
|
This method can be used both to edit an existing data element, or to create
|
@@ -171,14 +211,11 @@ PUBLIC INSTANCE METHODS
|
|
171
211
|
obj.set_value("Anonymous", "0010,0010", :create => false)
|
172
212
|
Example 2: (Insert binary data for a specific tag)
|
173
213
|
obj.set_value(data, 52, :bin => true, :create => false)
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
Inserts the binary content of a file to the Pixel Data tag in your DICOM object.
|
180
|
-
This can be useful if you have processed some image data using a custom program
|
181
|
-
and just wants to put that data back into a DICOM object.
|
214
|
+
Example 3: (Create a private data element)
|
215
|
+
obj.set_value("Test", "0011,0010", :vr => "LO")
|
216
|
+
Example 4: (Create/edit a data element in a specific item in a given sequence)
|
217
|
+
items = obj.get_pos("FFFE,E000", :parent => "0040,0275")
|
218
|
+
obj.set_value("CT1", "0040,0007", :parent => items.first)
|
182
219
|
|
183
220
|
write(file)
|
184
221
|
Writes the DICOM object to the specified file.
|
@@ -197,10 +234,10 @@ PUBLIC CLASS METHODS
|
|
197
234
|
|
198
235
|
ACCESSORS (Read & write)
|
199
236
|
:blank
|
200
|
-
A boolean that you can set if you want
|
237
|
+
A boolean that you can set as true if you want all anonymization tags to be blank
|
201
238
|
instead of having some generic value.
|
202
239
|
:enumeration
|
203
|
-
A boolean that if set will make the script set enumerated values on anonymized tags,
|
240
|
+
A boolean that if set as true will make the script set enumerated values on anonymized tags,
|
204
241
|
such that you are able to separate the DICOM files of unique individuals after anonymization.
|
205
242
|
Example of fictious result:
|
206
243
|
"Joe Sixpack" => "Person1" and "Joe Schmoe" => "Person2"
|
@@ -209,7 +246,9 @@ ACCESSORS (Read & write)
|
|
209
246
|
the anonymized DICOM files at a later stage. The relationship between original names and
|
210
247
|
enumerated values is stored in a text file which you can keep for yourself, while handing out
|
211
248
|
the anonymized DICOM files to a third party.
|
212
|
-
|
249
|
+
:remove_private
|
250
|
+
If this accessor is set as true, all private tags in the selected DICOM files will be removed.
|
251
|
+
This can be useful if you are unsure whether the private tags contain sensitive data or not.
|
213
252
|
:write_path
|
214
253
|
You may set a different path for where the anonymized DICOM files will be stored. If this
|
215
254
|
value is not set, the Anonymizer script will overwrite the old DICOM files.
|
@@ -218,14 +257,14 @@ ACCESSORS (Read & write)
|
|
218
257
|
|
219
258
|
PUBLIC INSTANCE METHODS
|
220
259
|
|
260
|
+
add_exception(path)
|
261
|
+
Adds a folder who's files (including all files in its subfolders) will be excluded from anonymization.
|
262
|
+
|
221
263
|
add_folder(path)
|
222
264
|
Adds a folder who's files (including all files in subfolders) will be anonymized.
|
223
265
|
Example:
|
224
266
|
a.add_folder("/home/dicom")
|
225
267
|
|
226
|
-
add_exception(path)
|
227
|
-
Adds a folder who's files (including all files in its subfolders) will be excluded from anonymization.
|
228
|
-
|
229
268
|
add_tag(tag, options={})
|
230
269
|
Adds a tag to the list of tags that will be anonymized. As options you can specify value to be used
|
231
270
|
and whether the tag should be included for enumeration if this feature has been activated.
|
@@ -288,16 +327,6 @@ ACCESSORS (Read only)
|
|
288
327
|
|
289
328
|
PUBLIC INSTANCE METHODS
|
290
329
|
|
291
|
-
get_image(path, options={})
|
292
|
-
Retrieve a DICOM image file from a server (C-GET-RQ) (this method is untested (might not work)).
|
293
|
-
Accepted options:
|
294
|
-
"0008,0018" (SOP Instance UID)
|
295
|
-
"0008,0052" (Query/Retrieve Level)
|
296
|
-
"0020,000D" (Study Instance UID)
|
297
|
-
"0020,000E" (Series Instance UID)
|
298
|
-
Example:
|
299
|
-
node.get_image("/home/dicom/", "0008,0018" => sop_uid, "0020,000D" => study_uid, "0020,000E" => series_uid)
|
300
|
-
|
301
330
|
find_images(options={})
|
302
331
|
Query a server for DICOM images that matches your specified criteria.
|
303
332
|
Accepted options:
|
@@ -351,6 +380,16 @@ PUBLIC INSTANCE METHODS
|
|
351
380
|
Example:
|
352
381
|
result = node.find_studies("0008,0020" => study_date, "0010,000D" => patient_id)
|
353
382
|
|
383
|
+
get_image(path, options={})
|
384
|
+
Retrieve a DICOM image file from a server (C-GET-RQ) (this method is untested (might not work)).
|
385
|
+
Accepted options:
|
386
|
+
"0008,0018" (SOP Instance UID)
|
387
|
+
"0008,0052" (Query/Retrieve Level)
|
388
|
+
"0020,000D" (Study Instance UID)
|
389
|
+
"0020,000E" (Series Instance UID)
|
390
|
+
Example:
|
391
|
+
node.get_image("/home/dicom/", "0008,0018" => sop_uid, "0020,000D" => study_uid, "0020,000E" => series_uid)
|
392
|
+
|
354
393
|
move_image(destination, options={})
|
355
394
|
Move an image to a dicom node other than yourself.
|
356
395
|
Accepted options:
|
@@ -385,10 +424,17 @@ PUBLIC CLASS METHODS
|
|
385
424
|
|
386
425
|
new(port, options={})
|
387
426
|
Initialize a new DServer instance.
|
388
|
-
Example:
|
427
|
+
Example 1:
|
389
428
|
server = DICOM::DServer.new(104)
|
429
|
+
Example 2: (Initialize a DServer using a customized FileHandler placed in your local folder)
|
430
|
+
require 'MyFileHandler'
|
431
|
+
server = DICOM::DServer.new(104, :host_ae => "RUBY_SERVER", :file_handler => DICOM::MyFileHandler)
|
390
432
|
|
391
433
|
ACCESSORS (Read & write)
|
434
|
+
:file_handler
|
435
|
+
You may write your own, customized FileHandler (the file that determines how incoming DICOM files are handled),
|
436
|
+
put it in your local execution environment, and hook it to your DServer instance by using this accessor.
|
437
|
+
This is quite a powerful option, as it will enable you to do practically whatever you want with incoming DICOM files.
|
392
438
|
:host_ae
|
393
439
|
Called application entity (name of the service class provider - server).
|
394
440
|
:max_package_size
|
data/README
CHANGED
@@ -9,7 +9,7 @@ and Communications in Medicine) is a standard for handling, storing, printing,
|
|
9
9
|
and transmitting information in medical imaging. It includes a file format definition
|
10
10
|
and a network communications protocol. Ruby DICOM supports reading from, editing and
|
11
11
|
writing to this file format. It also features experimental support for network
|
12
|
-
communication modalities like query, move and
|
12
|
+
communication modalities like query, move, sending and receiving files.
|
13
13
|
|
14
14
|
BASIC USAGE
|
15
15
|
-----------
|
@@ -47,7 +47,7 @@ dcm = DICOM::DObject.new("myFile.dcm") ;0
|
|
47
47
|
COPYRIGHT
|
48
48
|
---------
|
49
49
|
|
50
|
-
Copyright 2008-
|
50
|
+
Copyright 2008-2010 Christoffer Lervåg
|
51
51
|
|
52
52
|
This program is free software: you can redistribute it and/or modify
|
53
53
|
it under the terms of the GNU General Public License as published by
|
@@ -67,7 +67,7 @@ ABOUT ME
|
|
67
67
|
--------
|
68
68
|
|
69
69
|
Name:
|
70
|
-
Christoffer
|
70
|
+
Christoffer Lervåg
|
71
71
|
|
72
72
|
Location:
|
73
73
|
Oslo, Norway
|
data/lib/dicom.rb
CHANGED
@@ -1,14 +1,25 @@
|
|
1
1
|
# Core library:
|
2
|
-
require 'DClient'
|
3
|
-
require 'Dictionary'
|
4
|
-
require 'DLibrary'
|
5
|
-
require 'DObject'
|
6
|
-
require 'DRead'
|
7
|
-
require 'DServer'
|
8
|
-
require 'DWrite'
|
9
|
-
require '
|
10
|
-
require '
|
2
|
+
require 'dicom/DClient'
|
3
|
+
require 'dicom/Dictionary'
|
4
|
+
require 'dicom/DLibrary'
|
5
|
+
require 'dicom/DObject'
|
6
|
+
require 'dicom/DRead'
|
7
|
+
require 'dicom/DServer'
|
8
|
+
require 'dicom/DWrite'
|
9
|
+
require 'dicom/FileHandler'
|
10
|
+
require 'dicom/Link'
|
11
|
+
require 'dicom/Stream'
|
11
12
|
# Extended library:
|
12
|
-
require 'Anonymizer'
|
13
|
-
# Ruby library
|
14
|
-
require 'ruby_extensions'
|
13
|
+
require 'dicom/Anonymizer'
|
14
|
+
# Extensions to the Ruby library:
|
15
|
+
require 'dicom/ruby_extensions'
|
16
|
+
|
17
|
+
# Ruby DICOM version string:
|
18
|
+
DICOM::VERSION = "0.7"
|
19
|
+
|
20
|
+
# Load the DICOM Library class (dictionary):
|
21
|
+
DICOM::LIBRARY = DICOM::DLibrary.new
|
22
|
+
|
23
|
+
# Ruby DICOM implementation name and uid:
|
24
|
+
DICOM::NAME = "RUBY_DICOM_" + DICOM::VERSION
|
25
|
+
DICOM::UID = "1.2.826.0.1.3680043.8.641"
|