metamri 0.1.9 → 0.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -1
- data/lib/metamri/core_additions.rb +17 -0
- data/lib/metamri.rb +3 -0
- data/lib/raw_image_dataset.rb +1 -16
- data/lib/raw_image_file.rb +2 -2
- data/lib/visit_raw_data_directory.rb +2 -1
- data/metamri.gemspec +3 -2
- data/test/nifti_builder_spec.rb +27 -14
- metadata +3 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.10
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class String
|
2
|
+
|
3
|
+
=begin rdoc
|
4
|
+
Does same basic string replacements to ensure valid filenames.
|
5
|
+
=end
|
6
|
+
def escape_filename
|
7
|
+
mgsub([[/[\s\:\)\(\/\?]+/, "-"], [/\*/, "star"]])
|
8
|
+
end
|
9
|
+
|
10
|
+
def mgsub(key_value_pairs=[].freeze)
|
11
|
+
regexp_fragments = key_value_pairs.collect { |k,v| k }
|
12
|
+
gsub(Regexp.union(*regexp_fragments)) do |match|
|
13
|
+
key_value_pairs.detect { |k,v| k =~ match}[1]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
data/lib/metamri.rb
CHANGED
data/lib/raw_image_dataset.rb
CHANGED
@@ -177,12 +177,7 @@ have more component files than shell commands can handle.
|
|
177
177
|
end
|
178
178
|
end
|
179
179
|
|
180
|
-
|
181
|
-
Does same basic string replacements to ensure valid filenames.
|
182
|
-
=end
|
183
|
-
def escape_filename(filename)
|
184
|
-
filename.mgsub([[/[\s\:\)\(\/]+/, "-"], [/\*/, "star"]])
|
185
|
-
end
|
180
|
+
|
186
181
|
|
187
182
|
private
|
188
183
|
|
@@ -191,15 +186,5 @@ private
|
|
191
186
|
@timestamp = (@raw_image_files.sort_by { |i| i.timestamp }).first.timestamp
|
192
187
|
end
|
193
188
|
|
194
|
-
|
195
189
|
end
|
196
190
|
#### END OF CLASS ####
|
197
|
-
|
198
|
-
class String
|
199
|
-
def mgsub(key_value_pairs=[].freeze)
|
200
|
-
regexp_fragments = key_value_pairs.collect { |k,v| k }
|
201
|
-
gsub(Regexp.union(*regexp_fragments)) do |match|
|
202
|
-
key_value_pairs.detect { |k,v| k =~ match}[1]
|
203
|
-
end
|
204
|
-
end
|
205
|
-
end
|
data/lib/raw_image_file.rb
CHANGED
@@ -79,7 +79,7 @@ temporary file.
|
|
79
79
|
@hdr_data, @hdr_reader = read_header(absfilepath)
|
80
80
|
#puts "@hdr_data: #{@hdr_data}; @hdr_reader: #{@hdr_reader}"
|
81
81
|
rescue Exception => e
|
82
|
-
raise(IOError, "Header not readable. #{e}")
|
82
|
+
raise(IOError, "Header not readable for file #{@filename}. #{e}")
|
83
83
|
end
|
84
84
|
|
85
85
|
# file type is based on file name but only if the header was read successfully
|
@@ -90,7 +90,7 @@ temporary file.
|
|
90
90
|
begin
|
91
91
|
import_hdr
|
92
92
|
rescue Exception => e
|
93
|
-
raise(IOError, "Header import failed. #{e}")
|
93
|
+
raise(IOError, "Header import failed for file #{@filename}. #{e}")
|
94
94
|
end
|
95
95
|
|
96
96
|
# deallocate the header data to save memory space.
|
@@ -157,7 +157,7 @@ Returns an array of the created nifti files.
|
|
157
157
|
|
158
158
|
@datasets.each do |dataset|
|
159
159
|
nifti_output_path = output_directory
|
160
|
-
nifti_filename = "#{scanid}_#{dataset.escape_filename
|
160
|
+
nifti_filename = "#{scanid}_#{dataset.series_description.escape_filename}_#{File.basename(dataset.directory).escape_filename}.nii"
|
161
161
|
|
162
162
|
Pathname.new(dataset.directory).all_dicoms do |dicom_files|
|
163
163
|
nifti_input_path = File.dirname(dicom_files.first)
|
@@ -470,6 +470,7 @@ class Pathname
|
|
470
470
|
|
471
471
|
def local_copy(tempdir = Dir.tmpdir)
|
472
472
|
tfbase = self.to_s =~ /\.bz2$/ ? self.basename.to_s.chomp(".bz2") : self.basename.to_s
|
473
|
+
tfbase.escape_filename
|
473
474
|
tmpfile = File.join(tempdir, tfbase)
|
474
475
|
if self.to_s =~ /\.bz2$/
|
475
476
|
`bunzip2 -k -c '#{self.to_s}' >> '#{tmpfile}'`
|
data/metamri.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{metamri}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.10"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Kristopher J. Kosmatka"]
|
12
|
-
s.date = %q{2010-01-
|
12
|
+
s.date = %q{2010-01-25}
|
13
13
|
s.description = %q{Extraction of MRI metadata and insertion into compatible sqlite3 databases.}
|
14
14
|
s.email = %q{kk4@medicine.wisc.edu}
|
15
15
|
s.executables = ["convert_visit.rb", "import_study.rb", "import_visit.rb", "import_respiratory_files.rb"]
|
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
|
|
27
27
|
"bin/import_study.rb",
|
28
28
|
"bin/import_visit.rb",
|
29
29
|
"lib/metamri.rb",
|
30
|
+
"lib/metamri/core_additions.rb",
|
30
31
|
"lib/mysql_tools.rb",
|
31
32
|
"lib/nifti_builder.rb",
|
32
33
|
"lib/raw_image_dataset.rb",
|
data/test/nifti_builder_spec.rb
CHANGED
@@ -3,54 +3,67 @@ $:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
|
3
3
|
require 'rubygems'
|
4
4
|
require 'spec'
|
5
5
|
require 'fileutils'
|
6
|
+
require 'tmpdir'
|
6
7
|
require 'visit_raw_data_directory'
|
7
8
|
require 'raw_image_dataset'
|
8
9
|
require 'raw_image_file'
|
9
10
|
|
10
|
-
VISIT_FIXTURE = File.join(Dir.tmpdir, 'fixtures/visit_raw_data_directory/tbiva018b_9336_12022009')
|
11
11
|
VISIT_FIXTURE_SRC = '/Data/vtrak1/raw/johnson.tbi-va.visit1/tbiva018b_9336_12022009'
|
12
|
+
VISIT_FIXTURE = File.join(Dir.tmpdir, 'fixtures/visit_raw_data_directory/tbiva018b_9336_12022009')
|
13
|
+
VISIT_FIXTURE_UNZIPPED = File.join(Dir.tmpdir, 'fixtures/visit_raw_data_directory/tbiva018b_9336_12022009_unzipped')
|
14
|
+
|
15
|
+
|
12
16
|
|
13
17
|
describe "Convert Unknown Dicoms to Nifti Files" do
|
14
18
|
before(:all) do
|
15
19
|
# Initialize a local scratch directory to hold fixtures for testing if it doesn't already exist.
|
16
|
-
unless File.directory?(VISIT_FIXTURE)
|
17
|
-
FileUtils.mkdir_p(File.dirname(VISIT_FIXTURE))
|
18
|
-
FileUtils.cp_r(VISIT_FIXTURE_SRC, VISIT_FIXTURE)
|
19
|
-
|
20
|
+
#unless File.directory?(VISIT_FIXTURE)
|
21
|
+
#FileUtils.mkdir_p(File.dirname(VISIT_FIXTURE))
|
22
|
+
#FileUtils.cp_r(VISIT_FIXTURE_SRC, VISIT_FIXTURE)
|
23
|
+
#FileUtils.cp_r(VISIT_FIXTURE, VISIT_FIXTURE_UNZIPPED)
|
24
|
+
`find #{VISIT_FIXTURE_UNZIPPED} -name '*.bz2' -exec bunzip2 {} \\;`
|
25
|
+
#end
|
20
26
|
end
|
21
27
|
|
22
28
|
before(:each) do
|
23
29
|
@visit = VisitRawDataDirectory.new(VISIT_FIXTURE, 'johnson.tbi-va.visit1')
|
24
30
|
@dataset = RawImageDataset.new(
|
25
31
|
File.join(VISIT_FIXTURE, '001'),
|
26
|
-
[RawImageFile.new(File.join(VISIT_FIXTURE, '001/I0001.dcm'))]
|
32
|
+
[RawImageFile.new(File.join(VISIT_FIXTURE, '001/I0001.dcm.bz2'))]
|
33
|
+
)
|
34
|
+
|
35
|
+
@visit_unzipped = VisitRawDataDirectory.new(VISIT_FIXTURE_UNZIPPED, 'johnson.tbi-va.visit1')
|
36
|
+
@dataset_unzipped = RawImageDataset.new(
|
37
|
+
File.join(VISIT_FIXTURE_UNZIPPED, '001'),
|
38
|
+
[RawImageFile.new(File.join(VISIT_FIXTURE_UNZIPPED, '001/I0001.dcm'))]
|
27
39
|
)
|
40
|
+
|
28
41
|
@test_niftis = Array.new
|
29
42
|
@output_directories = Array.new
|
30
43
|
end
|
31
44
|
|
32
45
|
it "should Convert an anatomical from dicom to nifti using original, unzipped files." do
|
33
|
-
@
|
34
|
-
nifti_conversion_command, nifti_output_file = @
|
35
|
-
nifti_conversion_command.should == "to3d -session /tmp/ -prefix filename.nii #{@
|
46
|
+
@dataset_unzipped.to_nifti('/tmp/', 'filename.nii', :input_directory => @dataset_unzipped.directory)[0].should == "to3d -session /tmp/ -prefix filename.nii #{@dataset_unzipped.directory}/'*.dcm'"
|
47
|
+
nifti_conversion_command, nifti_output_file = @dataset_unzipped.to_nifti!('/tmp/', 'filename.nii', :input_directory => @dataset_unzipped.directory)
|
48
|
+
nifti_conversion_command.should == "to3d -session /tmp/ -prefix filename.nii #{@dataset_unzipped.directory}/'*.dcm'"
|
36
49
|
@test_niftis << nifti_output_file
|
37
50
|
@output_directories << '/tmp'
|
38
51
|
end
|
39
52
|
|
40
53
|
it "should convert all anatomicals in a visit raw directory using original, unzipped files." do
|
41
|
-
@
|
54
|
+
@visit_unzipped.scan
|
42
55
|
|
43
|
-
@
|
56
|
+
@visit_unzipped.datasets.each do |ds|
|
44
57
|
begin
|
45
|
-
nifti_filename = "#{@
|
46
|
-
nifti_conversion_commmand, nifti_output_file = ds.to_nifti!(File.join(Dir.tmpdir, @
|
58
|
+
nifti_filename = "#{@visit_unzipped.scanid}_#{ds.series_description.escape_filename}_#{File.basename(ds.directory)}.nii"
|
59
|
+
nifti_conversion_commmand, nifti_output_file = ds.to_nifti!(File.join(Dir.tmpdir, @visit_unzipped.default_preprocess_directory), nifti_filename, :input_directory => ds.directory, :append_modality_directory => true )
|
47
60
|
@test_niftis << nifti_output_file
|
48
61
|
rescue IOError => e
|
49
62
|
puts "-- Error: #{e.message}"
|
50
63
|
end
|
51
64
|
end
|
52
65
|
|
53
|
-
@output_directories = File.join(@
|
66
|
+
@output_directories = File.join(@visit_unzipped.default_preprocess_directory, 'unknown')
|
54
67
|
end
|
55
68
|
|
56
69
|
it "should convert all anatomicals in a visit raw directory using local copy." do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metamri
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kristopher J. Kosmatka
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-01-
|
12
|
+
date: 2010-01-25 00:00:00 -06:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -35,6 +35,7 @@ files:
|
|
35
35
|
- bin/import_study.rb
|
36
36
|
- bin/import_visit.rb
|
37
37
|
- lib/metamri.rb
|
38
|
+
- lib/metamri/core_additions.rb
|
38
39
|
- lib/mysql_tools.rb
|
39
40
|
- lib/nifti_builder.rb
|
40
41
|
- lib/raw_image_dataset.rb
|