metamri 0.1.16 → 0.1.17

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.16
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
- # -h, --help Displays help message
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
- # == Function
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\:\)\(\/\?]+/, "-"], [/\*/, "star"]])
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.tmpdir, &block)
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 = "#{TO3D_CMD} -session #{nifti_output_directory} -prefix #{nifti_filename} #{input_files}"
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
- puts "+++ Warning: #{name} could not be found."
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.16"
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-04-23}
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", "convert_visit.rb", "import_respiratory_files.rb", "import_visit.rb", "list_visit"]
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/raw_image_dataset_test.rb",
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/nifti_builder_spec.rb"
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
- - 16
9
- version: 0.1.16
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-04-23 00:00:00 -05:00
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/nifti_builder_spec.rb
122
+ - test/raw_image_dataset_thumbnail_spec.rb
File without changes