metamri 0.1.16 → 0.1.17
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/bin/convert_visit.rb +7 -14
- data/lib/metamri/core_additions.rb +6 -2
- data/lib/{nifti_builder.rb → metamri/nifti_builder.rb} +7 -2
- data/lib/{raw_image_dataset.rb → metamri/raw_image_dataset.rb} +31 -4
- data/lib/metamri/raw_image_dataset_thumbnail.rb +95 -0
- data/lib/{raw_image_file.rb → metamri/raw_image_file.rb} +4 -1
- data/lib/{visit_raw_data_directory.rb → metamri/visit_raw_data_directory.rb} +3 -4
- data/lib/metamri.rb +4 -3
- data/metamri.gemspec +14 -11
- data/test/raw_image_dataset_thumbnail_spec.rb +77 -0
- data/test/visit_test.rb +1 -1
- metadata +15 -12
- /data/lib/{mysql_tools.rb → metamri/mysql_tools.rb} +0 -0
- /data/lib/{series_description_parameters.rb → metamri/series_description_parameters.rb} +0 -0
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.17
|
data/bin/convert_visit.rb
CHANGED
@@ -6,17 +6,19 @@
|
|
6
6
|
#
|
7
7
|
# == Examples
|
8
8
|
# convert_visit.rb /Data/vtrak1/raw/ries.aware.visit1/awr001_7854_02102009 ries.aware.visit1
|
9
|
-
|
9
|
+
# convert_visit.rb /Data/vtrak1/raw/ries.aware.visit1/awr001_7854_02102009 ries.aware.visit1 /Data/scratch/temp_analysis/awr001
|
10
10
|
#
|
11
11
|
# == Usage
|
12
12
|
# convert_visit.rb <raw_data_directory> <scan_procedure_codename>
|
13
13
|
#
|
14
14
|
# For help use: import_visit.rb -h
|
15
15
|
#
|
16
|
+
# Currently, the script will create an "unknown" directory in the output
|
17
|
+
# directory, and will place files named after the series description in the
|
18
|
+
# dicom header in that directory.
|
19
|
+
#
|
16
20
|
# == Options
|
17
|
-
#
|
18
|
-
# -v, --visit Visit raw data directory, absolute path
|
19
|
-
# -p, --scan_procedure scan_procedure codename, e.g. johnson.alz.visit1
|
21
|
+
# There is currently no option parser in this script. To be implemented.
|
20
22
|
#
|
21
23
|
# == Author
|
22
24
|
#
|
@@ -32,16 +34,7 @@ require 'pathname'
|
|
32
34
|
require 'rdoc/usage'
|
33
35
|
require 'logger'
|
34
36
|
|
35
|
-
|
36
|
-
#
|
37
|
-
#
|
38
|
-
# == Usage
|
39
|
-
#
|
40
|
-
# convert_visit.rb /Data/vtrak1/raw/ries.aware.visit1/awr001_9999_010110/ ries.aware.visit1 /tmp/awr001
|
41
|
-
#
|
42
|
-
# == Example
|
43
|
-
#
|
44
|
-
#
|
37
|
+
|
45
38
|
def convert_visit(raw_directory, scan_procedure_codename, output_directory = nil)
|
46
39
|
$LOG = Logger.new(File.join(Dir.tmpdir, File.basename(raw_directory)))
|
47
40
|
v = VisitRawDataDirectory.new(raw_directory, scan_procedure_codename)
|
@@ -1,10 +1,11 @@
|
|
1
|
+
require 'tmpdir'
|
1
2
|
class String
|
2
3
|
|
3
4
|
=begin rdoc
|
4
5
|
Does same basic string replacements to ensure valid filenames.
|
5
6
|
=end
|
6
7
|
def escape_filename
|
7
|
-
mgsub([[/[\s\:\)\(
|
8
|
+
mgsub([[/[\s\:\)\(\/\?\,]+/, "-"], [/\*/, "star"], [/\./,""]])
|
8
9
|
end
|
9
10
|
|
10
11
|
def mgsub(key_value_pairs=[].freeze)
|
@@ -98,10 +99,13 @@ class Pathname
|
|
98
99
|
and ensure the local copy is deleted.
|
99
100
|
=end
|
100
101
|
|
101
|
-
def local_copy(tempdir = Dir.
|
102
|
+
def local_copy(tempdir = Dir.mktmpdir, &block)
|
102
103
|
tfbase = self.to_s =~ /\.bz2$/ ? self.basename.to_s.chomp(".bz2") : self.basename.to_s
|
103
104
|
tfbase.escape_filename
|
104
105
|
tmpfile = File.join(tempdir, tfbase)
|
106
|
+
# puts tmpfile
|
107
|
+
# puts File.exist?(tmpfile)
|
108
|
+
File.delete(tmpfile) if File.exist?(tmpfile)
|
105
109
|
if self.to_s =~ /\.bz2$/
|
106
110
|
`bunzip2 -k -c '#{self.to_s}' >> '#{tmpfile}'`
|
107
111
|
else
|
@@ -4,7 +4,6 @@
|
|
4
4
|
Builds Nifti files from Dicoms.
|
5
5
|
=end
|
6
6
|
|
7
|
-
TO3D_CMD = 'to3d'
|
8
7
|
|
9
8
|
module UnknownImageDataset
|
10
9
|
# Always set AFNI GE DICOM Fix to "No" before conversion with to3d.
|
@@ -19,12 +18,18 @@ module UnknownImageDataset
|
|
19
18
|
else input_files = "#{Dir.tmpdir}/'#{glob}'"
|
20
19
|
end
|
21
20
|
|
21
|
+
if @raw_image_files.first.rep_time && @raw_image_files.first.bold_reps && @raw_image_files.first.num_slices
|
22
|
+
slice_order = "altplus"
|
23
|
+
functional_args = "-time:zt #{@raw_image_files.first.num_slices} #{@raw_image_files.first.bold_reps} #{@raw_image_files.first.rep_time} #{slice_order}"
|
24
|
+
end
|
25
|
+
|
26
|
+
|
22
27
|
nifti_output_file = File.join(nifti_output_directory, nifti_filename)
|
23
28
|
|
24
29
|
File.makedirs(nifti_output_directory) unless File.directory?(nifti_output_directory)
|
25
30
|
raise(IOError, "Cannot write to #{nifti_output_directory}") unless File.writable?(nifti_output_directory)
|
26
31
|
|
27
|
-
nifti_conversion_command = "
|
32
|
+
nifti_conversion_command = "to3d -session #{nifti_output_directory} -prefix #{nifti_filename} #{functional_args} #{input_files}"
|
28
33
|
|
29
34
|
return nifti_conversion_command, nifti_output_file
|
30
35
|
end
|
@@ -1,8 +1,7 @@
|
|
1
|
-
|
2
1
|
require 'rubygems'
|
3
2
|
require 'sqlite3'
|
4
|
-
require 'nifti_builder'
|
5
3
|
require 'ftools'
|
4
|
+
require 'metamri/nifti_builder'
|
6
5
|
|
7
6
|
=begin rdoc
|
8
7
|
A #Dataset defines a single 3D or 4D image, i.e. either a volume or a time series
|
@@ -28,6 +27,8 @@ class RawImageDataset
|
|
28
27
|
attr_reader :scanned_file
|
29
28
|
# the scanner source
|
30
29
|
attr_reader :scanner_source
|
30
|
+
# A #RawImageDatasetThumbnail object that composes the thumbnail for the dataset.
|
31
|
+
attr_reader :thumbnail
|
31
32
|
|
32
33
|
=begin rdoc
|
33
34
|
* dir: The directory containing the files.
|
@@ -61,6 +62,8 @@ class RawImageDataset
|
|
61
62
|
raise(IndexError, "No scanned file found") if @scanned_file.nil?
|
62
63
|
@scanner_source = @raw_image_files.first.source
|
63
64
|
raise(IndexError, "No scanner source found") if @scanner_source.nil?
|
65
|
+
|
66
|
+
$LOG ||= Logger.new(STDOUT)
|
64
67
|
end
|
65
68
|
|
66
69
|
=begin rdoc
|
@@ -102,8 +105,14 @@ at the visit level, or even higher when doing a whole file system scan.
|
|
102
105
|
|
103
106
|
=begin rdoc
|
104
107
|
Returns a hash of attributes used for insertion into active record.
|
108
|
+
Options: :thumb => FileHandle to thumbnail includes a thumbnail.
|
105
109
|
=end
|
106
|
-
def attributes_for_active_record
|
110
|
+
def attributes_for_active_record(options = {})
|
111
|
+
thumbnail = options.has_key?(:thumb) ? options[:thumb] : nil
|
112
|
+
|
113
|
+
unless (thumbnail.class == File || thumbnail == nil)
|
114
|
+
raise(IOError, "Thumbnail #{options[:thumb]} must be a #File.")
|
115
|
+
end
|
107
116
|
{ :rmr => @rmr_number,
|
108
117
|
:series_description => @series_description,
|
109
118
|
:path => @directory,
|
@@ -112,7 +121,20 @@ Returns a hash of attributes used for insertion into active record.
|
|
112
121
|
:rep_time => @raw_image_files.first.rep_time,
|
113
122
|
:bold_reps => @raw_image_files.first.bold_reps,
|
114
123
|
:slices_per_volume => @raw_image_files.first.num_slices,
|
115
|
-
:scanned_file => @scanned_file
|
124
|
+
:scanned_file => @scanned_file,
|
125
|
+
:thumbnail => thumbnail
|
126
|
+
}
|
127
|
+
end
|
128
|
+
|
129
|
+
def create_thumbnail
|
130
|
+
@thumbnail = RawImageDatasetThumbnail.new(self)
|
131
|
+
@thumbnail.create_thumbnail
|
132
|
+
end
|
133
|
+
|
134
|
+
def thumbnail_for_active_record
|
135
|
+
# Ensure a thumbnail has been created.
|
136
|
+
create_thumbnail unless @thumbnail
|
137
|
+
return File.open(@thumbnail.path)
|
116
138
|
end
|
117
139
|
|
118
140
|
=begin rdoc
|
@@ -170,11 +192,16 @@ have more component files than shell commands can handle.
|
|
170
192
|
return 'I.*'
|
171
193
|
when /^I/
|
172
194
|
return 'I*.dcm'
|
195
|
+
when /.*\.\d{3,4}/
|
196
|
+
return '*.[0-9]*'
|
173
197
|
when /\.0/
|
174
198
|
return '*.0*'
|
175
199
|
else
|
176
200
|
return nil
|
177
201
|
end
|
202
|
+
# Note - To exclude just yaml files we could also just use the bash glob
|
203
|
+
# '!(*.yaml), but we would have to list all exclusions. This may turn
|
204
|
+
# out easier in the long run.
|
178
205
|
end
|
179
206
|
|
180
207
|
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require 'dicom'
|
2
|
+
require 'rmagick'
|
3
|
+
require 'tmpdir'
|
4
|
+
|
5
|
+
# This class is a ruby object encapsulating a .png 2D Thumbnail of a Dataset
|
6
|
+
class RawImageDatasetThumbnail
|
7
|
+
|
8
|
+
attr_reader :dataset, :path
|
9
|
+
|
10
|
+
def initialize(dataset)
|
11
|
+
if dataset.class == RawImageDataset
|
12
|
+
@dataset = dataset
|
13
|
+
else
|
14
|
+
raise StandardError, "Dataset #{dataset} class must be RawImageDataset."
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def thumbnail
|
19
|
+
@path ||= create_thumbnail
|
20
|
+
end
|
21
|
+
|
22
|
+
# Returns the path of png and sets the instance variable 'path' after successfull creation.
|
23
|
+
# Raises a ScriptError if the thumbnail could not be created.
|
24
|
+
# Raises a StandardError if the format is incorrect (i.e. P-file instead of DICOM)
|
25
|
+
def create_thumbnail(output = nil)
|
26
|
+
raise StandardError, "Thumbnail available only for DICOM format." unless dataset.raw_image_files.first.dicom?
|
27
|
+
if output
|
28
|
+
if File.directory?(output)
|
29
|
+
output_directory = output.escape_filename
|
30
|
+
else
|
31
|
+
output_directory = File.dirname(output).escape_filename
|
32
|
+
png_filename = File.basename(output).escape_filename
|
33
|
+
end
|
34
|
+
else
|
35
|
+
output_directory = Dir.mktmpdir
|
36
|
+
end
|
37
|
+
name = @dataset.series_description.escape_filename
|
38
|
+
png_filename ||= File.join(output_directory, name + '.png')
|
39
|
+
nifti_filename ||= File.join(output_directory, name + '.nii')
|
40
|
+
|
41
|
+
begin
|
42
|
+
@path = create_thumbnail_with_rubydicom(png_filename)
|
43
|
+
rescue RangeError, ScriptError => e
|
44
|
+
puts "Could not create thumbnail with rubydicom. Trying FSL slicer."
|
45
|
+
@path = create_thumbnail_with_fsl_slicer(output_directory, nifti_filename, png_filename)
|
46
|
+
end
|
47
|
+
|
48
|
+
return @path
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def create_thumbnail_with_rubydicom(output_file = nil)
|
54
|
+
unless output_file && File.writable?(File.dirname(output_file))
|
55
|
+
output_file = File.join(Dir.mktmpdir, dataset.series_description.escape_filename + '.jpg')
|
56
|
+
end
|
57
|
+
|
58
|
+
dicom_files = Dir.glob(File.join(dataset.directory, dataset.glob))
|
59
|
+
if dicom_files.empty? # Try the glob again with a zipped extension.
|
60
|
+
dicom_files = Dir.glob(File.join(dataset.directory, dataset.glob) + '*.bz2')
|
61
|
+
end
|
62
|
+
if dicom_files.empty? # If still empty...
|
63
|
+
raise StandardError, "Could not find dicom files using #{dataset.glob} in #{dataset.directory}"
|
64
|
+
end
|
65
|
+
dicom_file = Pathname(dicom_files[dicom_files.size/2])
|
66
|
+
dicom_file.local_copy do |lc|
|
67
|
+
dcm = DICOM::DObject.new(lc.to_s)
|
68
|
+
raise ScriptError, "Could not read dicom #{dicom_file.to_s}" unless dcm.read_success
|
69
|
+
image = dcm.get_image_magick(:rescale => true)
|
70
|
+
raise ScriptError, "RubyDicom did not return an image array (this is probably a color image)." unless image
|
71
|
+
image[0].write(output_file)
|
72
|
+
end
|
73
|
+
|
74
|
+
return output_file
|
75
|
+
end
|
76
|
+
|
77
|
+
def create_thumbnail_with_fsl_slicer(output_directory, nifti_filename, png_filename)
|
78
|
+
nii_path = File.join(output_directory, nifti_filename)
|
79
|
+
@path = File.join(output_directory, png_filename)
|
80
|
+
Pathname.new(dataset.directory).all_dicoms do |dicom_files|
|
81
|
+
# First Create a Nifti File to read
|
82
|
+
@dataset.to_nifti!(output_directory, nifti_filename, {:input_directory => File.dirname(dicom_files.first)} )
|
83
|
+
end
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
# Then create the .png
|
88
|
+
`slicer #{nii_path} -a #{@path}`
|
89
|
+
|
90
|
+
raise(ScriptError, "Error creating thumbnail #{@path}") unless File.exist?(@path)
|
91
|
+
|
92
|
+
return @path
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
@@ -57,6 +57,8 @@ class RawImageFile
|
|
57
57
|
attr_reader :rep_time
|
58
58
|
# Number of bold reps in the complete functional task run.
|
59
59
|
attr_reader :bold_reps
|
60
|
+
# Import Warnings - Fields that could not be read.
|
61
|
+
attr_reader :warnings
|
60
62
|
|
61
63
|
=begin rdoc
|
62
64
|
Creates a new instance of the class given a path to a valid image file.
|
@@ -73,6 +75,7 @@ temporary file.
|
|
73
75
|
absfilepath = File.expand_path(pathtofile)
|
74
76
|
raise(IOError, "File not found at #{absfilepath}.") if not File.exists?(absfilepath)
|
75
77
|
@filename = File.basename(absfilepath)
|
78
|
+
@warnings = []
|
76
79
|
|
77
80
|
# try to read the header, raise an IOError if unsuccessful
|
78
81
|
begin
|
@@ -384,7 +387,7 @@ utility.
|
|
384
387
|
if tag_hash[:required]
|
385
388
|
raise ScriptError, "#{name}"
|
386
389
|
else
|
387
|
-
|
390
|
+
@warnings << "Tag #{name} could not be found."
|
388
391
|
end
|
389
392
|
end
|
390
393
|
end
|
@@ -4,11 +4,10 @@ require 'tempfile'
|
|
4
4
|
require 'yaml'
|
5
5
|
require 'tmpdir'
|
6
6
|
require 'fileutils'
|
7
|
-
require 'raw_image_file'
|
8
|
-
require 'raw_image_dataset'
|
9
7
|
require 'sqlite3'
|
10
8
|
require 'logger'
|
11
|
-
|
9
|
+
require 'metamri/raw_image_file'
|
10
|
+
require 'metamri/raw_image_dataset'
|
12
11
|
|
13
12
|
# A shared function that displays a message and the date/time to standard output.
|
14
13
|
def flash(msg)
|
@@ -171,7 +170,7 @@ Returns an array of the created nifti files.
|
|
171
170
|
nifti_input_path = File.dirname(dicom_files.first)
|
172
171
|
nifti_conversion_command, nifti_output_file = dataset.to_nifti!(nifti_output_path, nifti_filename, :input_directory => nifti_input_path, :append_modality_directory => true)
|
173
172
|
nifti_output_files << nifti_output_file
|
174
|
-
end
|
173
|
+
end
|
175
174
|
end
|
176
175
|
|
177
176
|
return nifti_output_files
|
data/lib/metamri.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
$: << File.dirname(__FILE__)
|
2
2
|
|
3
|
-
require 'raw_image_file'
|
4
|
-
require 'raw_image_dataset'
|
5
|
-
require 'visit_raw_data_directory'
|
6
3
|
require 'metamri/core_additions'
|
4
|
+
require 'metamri/raw_image_file'
|
5
|
+
require 'metamri/raw_image_dataset'
|
6
|
+
require 'metamri/visit_raw_data_directory'
|
7
|
+
require 'metamri/raw_image_dataset_thumbnail'
|
7
8
|
require 'metamri/raw_image_dataset_resource'
|
8
9
|
require 'metamri/visit_raw_data_directory_resource'
|
9
10
|
|
data/metamri.gemspec
CHANGED
@@ -5,14 +5,14 @@
|
|
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.17"
|
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-
|
12
|
+
s.date = %q{2010-05-07}
|
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
|
-
s.executables = ["import_study.rb", "
|
15
|
+
s.executables = ["import_study.rb", "import_visit.rb", "import_respiratory_files.rb", "list_visit", "convert_visit.rb"]
|
16
16
|
s.extra_rdoc_files = [
|
17
17
|
"README.rdoc"
|
18
18
|
]
|
@@ -29,18 +29,20 @@ Gem::Specification.new do |s|
|
|
29
29
|
"bin/list_visit",
|
30
30
|
"lib/metamri.rb",
|
31
31
|
"lib/metamri/core_additions.rb",
|
32
|
+
"lib/metamri/mysql_tools.rb",
|
33
|
+
"lib/metamri/nifti_builder.rb",
|
34
|
+
"lib/metamri/raw_image_dataset.rb",
|
32
35
|
"lib/metamri/raw_image_dataset_resource.rb",
|
36
|
+
"lib/metamri/raw_image_dataset_thumbnail.rb",
|
37
|
+
"lib/metamri/raw_image_file.rb",
|
38
|
+
"lib/metamri/series_description_parameters.rb",
|
39
|
+
"lib/metamri/visit_raw_data_directory.rb",
|
33
40
|
"lib/metamri/visit_raw_data_directory_resource.rb",
|
34
|
-
"lib/mysql_tools.rb",
|
35
|
-
"lib/nifti_builder.rb",
|
36
|
-
"lib/raw_image_dataset.rb",
|
37
|
-
"lib/raw_image_file.rb",
|
38
|
-
"lib/series_description_parameters.rb",
|
39
|
-
"lib/visit_raw_data_directory.rb",
|
40
41
|
"metamri.gemspec",
|
41
42
|
"test/fixtures/respiratory_fixtures.yaml",
|
42
43
|
"test/nifti_builder_spec.rb",
|
43
44
|
"test/raw_image_dataset_test.rb",
|
45
|
+
"test/raw_image_dataset_thumbnail_spec.rb",
|
44
46
|
"test/raw_image_file_test.rb",
|
45
47
|
"test/visit_duplication_test.rb",
|
46
48
|
"test/visit_test.rb"
|
@@ -51,11 +53,12 @@ Gem::Specification.new do |s|
|
|
51
53
|
s.rubygems_version = %q{1.3.6}
|
52
54
|
s.summary = %q{MRI metadata}
|
53
55
|
s.test_files = [
|
54
|
-
"test/
|
56
|
+
"test/nifti_builder_spec.rb",
|
57
|
+
"test/raw_image_dataset_test.rb",
|
55
58
|
"test/raw_image_file_test.rb",
|
56
59
|
"test/visit_duplication_test.rb",
|
57
60
|
"test/visit_test.rb",
|
58
|
-
"test/
|
61
|
+
"test/raw_image_dataset_thumbnail_spec.rb"
|
59
62
|
]
|
60
63
|
|
61
64
|
if s.respond_to? :specification_version then
|
@@ -0,0 +1,77 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
2
|
+
|
3
|
+
require 'spec'
|
4
|
+
require 'escoffier'
|
5
|
+
require 'tmpdir'
|
6
|
+
require 'raw_image_dataset'
|
7
|
+
require 'raw_image_file'
|
8
|
+
require 'metamri'
|
9
|
+
require 'metamri/raw_image_dataset_thumbnail'
|
10
|
+
|
11
|
+
describe "Create a thumbnail png for display." do
|
12
|
+
before(:all) do
|
13
|
+
# # Initialize a local scratch directory to hold fixtures for testing if it doesn't already exist.
|
14
|
+
# unless File.directory?(VISIT_FIXTURE)
|
15
|
+
# FileUtils.mkdir_p(File.dirname(VISIT_FIXTURE))
|
16
|
+
# FileUtils.cp_r(VISIT_FIXTURE_SRC, VISIT_FIXTURE)
|
17
|
+
# end
|
18
|
+
# unless File.directory?(VISIT_FIXTURE_UNZIPPED)
|
19
|
+
# FileUtils.cp_r(VISIT_FIXTURE, VISIT_FIXTURE_UNZIPPED)
|
20
|
+
# `find #{VISIT_FIXTURE_UNZIPPED} -name '*.bz2' -exec bunzip2 {} \\;`
|
21
|
+
# end
|
22
|
+
@fixture_path = '/Data/vtrak1/raw/johnson.merit220.visit1/mrt00033_830_04232010/dicoms/s10_cubet2'
|
23
|
+
end
|
24
|
+
|
25
|
+
before(:each) do
|
26
|
+
tmpdir = Dir.mktmpdir
|
27
|
+
Pathname.new(@fixture_path).prep_mise_to(tmpdir)
|
28
|
+
@dataset_wd = File.join(tmpdir, File.basename(@fixture_path))
|
29
|
+
@ds = RawImageDataset.new(@dataset_wd, RawImageFile.new(File.join(@dataset_wd, 's10_cubet2.0001')))
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should create a thumbnail in a tmpdir without a specified path." do
|
33
|
+
t = RawImageDatasetThumbnail.new(@ds)
|
34
|
+
t.create_thumbnail
|
35
|
+
|
36
|
+
File.basename(t.path).should == 'Sag-CUBE-T2.png'
|
37
|
+
File.exist?(t.path).should be_true
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should create a thumbnail with a specified path." do
|
41
|
+
output_filename = "/tmp/#{@ds.series_description.escape_filename}.png"
|
42
|
+
File.delete(output_filename) if File.exist?(output_filename)
|
43
|
+
|
44
|
+
t = RawImageDatasetThumbnail.new(@ds)
|
45
|
+
t.create_thumbnail('/tmp/')
|
46
|
+
|
47
|
+
t.path.should == output_filename
|
48
|
+
File.exist?(t.path).should be_true
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should create a thumbnail with a specified path and filename." do
|
53
|
+
output_filename = "/tmp/test.png"
|
54
|
+
File.delete(output_filename) if File.exist?(output_filename)
|
55
|
+
|
56
|
+
t = RawImageDatasetThumbnail.new(@ds)
|
57
|
+
t.create_thumbnail(output_filename)
|
58
|
+
|
59
|
+
t.path.should == '/tmp/test.png'
|
60
|
+
File.exist?(t.path).should be_true
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should raise a ScriptError if the file could not be created." do
|
64
|
+
t = RawImageDatasetThumbnail.new(@ds)
|
65
|
+
|
66
|
+
File.stub!(:exist?).and_return(false)
|
67
|
+
lambda { t.create_thumbnail }.should raise_error(ScriptError, /Error creating thumbnail/ )
|
68
|
+
end
|
69
|
+
|
70
|
+
after(:each) do
|
71
|
+
# @test_niftis.flatten.each { |nifti| File.delete(nifti) } unless @test_niftis.empty?
|
72
|
+
# [@output_directories, Dir.tmpdir, '/tmp'].flatten.each do |temp_dir|
|
73
|
+
# Dir.foreach(temp_dir) {|f| File.delete(File.join(temp_dir, f)) if File.extname(f) == '.nii'}
|
74
|
+
# end
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
data/test/visit_test.rb
CHANGED
@@ -4,9 +4,9 @@
|
|
4
4
|
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
5
5
|
|
6
6
|
require 'test/unit'
|
7
|
-
require 'visit_raw_data_directory'
|
8
7
|
require 'pathname'
|
9
8
|
require 'logger'
|
9
|
+
require 'metamri'
|
10
10
|
|
11
11
|
class RawImageFileTest < Test::Unit::TestCase
|
12
12
|
DBFILE = '/Users/kris/projects/TransferScans/db/development.sqlite3'
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 17
|
9
|
+
version: 0.1.17
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Kristopher J. Kosmatka
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-05-07 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -45,10 +45,10 @@ description: Extraction of MRI metadata and insertion into compatible sqlite3 da
|
|
45
45
|
email: kk4@medicine.wisc.edu
|
46
46
|
executables:
|
47
47
|
- import_study.rb
|
48
|
-
- convert_visit.rb
|
49
|
-
- import_respiratory_files.rb
|
50
48
|
- import_visit.rb
|
49
|
+
- import_respiratory_files.rb
|
51
50
|
- list_visit
|
51
|
+
- convert_visit.rb
|
52
52
|
extensions: []
|
53
53
|
|
54
54
|
extra_rdoc_files:
|
@@ -66,18 +66,20 @@ files:
|
|
66
66
|
- bin/list_visit
|
67
67
|
- lib/metamri.rb
|
68
68
|
- lib/metamri/core_additions.rb
|
69
|
+
- lib/metamri/mysql_tools.rb
|
70
|
+
- lib/metamri/nifti_builder.rb
|
71
|
+
- lib/metamri/raw_image_dataset.rb
|
69
72
|
- lib/metamri/raw_image_dataset_resource.rb
|
73
|
+
- lib/metamri/raw_image_dataset_thumbnail.rb
|
74
|
+
- lib/metamri/raw_image_file.rb
|
75
|
+
- lib/metamri/series_description_parameters.rb
|
76
|
+
- lib/metamri/visit_raw_data_directory.rb
|
70
77
|
- lib/metamri/visit_raw_data_directory_resource.rb
|
71
|
-
- lib/mysql_tools.rb
|
72
|
-
- lib/nifti_builder.rb
|
73
|
-
- lib/raw_image_dataset.rb
|
74
|
-
- lib/raw_image_file.rb
|
75
|
-
- lib/series_description_parameters.rb
|
76
|
-
- lib/visit_raw_data_directory.rb
|
77
78
|
- metamri.gemspec
|
78
79
|
- test/fixtures/respiratory_fixtures.yaml
|
79
80
|
- test/nifti_builder_spec.rb
|
80
81
|
- test/raw_image_dataset_test.rb
|
82
|
+
- test/raw_image_dataset_thumbnail_spec.rb
|
81
83
|
- test/raw_image_file_test.rb
|
82
84
|
- test/visit_duplication_test.rb
|
83
85
|
- test/visit_test.rb
|
@@ -112,8 +114,9 @@ signing_key:
|
|
112
114
|
specification_version: 3
|
113
115
|
summary: MRI metadata
|
114
116
|
test_files:
|
117
|
+
- test/nifti_builder_spec.rb
|
115
118
|
- test/raw_image_dataset_test.rb
|
116
119
|
- test/raw_image_file_test.rb
|
117
120
|
- test/visit_duplication_test.rb
|
118
121
|
- test/visit_test.rb
|
119
|
-
- test/
|
122
|
+
- test/raw_image_dataset_thumbnail_spec.rb
|
File without changes
|
File without changes
|