metamri 0.1.9 → 0.1.10

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.9
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
@@ -1,6 +1,9 @@
1
+ $: << File.dirname(__FILE__)
2
+
1
3
  require 'raw_image_file'
2
4
  require 'raw_image_dataset'
3
5
  require 'visit_raw_data_directory'
6
+ require 'metamri/core_additions'
4
7
 
5
8
  module Metamri
6
9
  end
@@ -177,12 +177,7 @@ have more component files than shell commands can handle.
177
177
  end
178
178
  end
179
179
 
180
- =begin rdoc
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
@@ -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(dataset.series_description)}_#{File.basename(dataset.directory)}.nii"
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.9"
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-22}
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",
@@ -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
- end
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
- @dataset.to_nifti('/tmp/', 'filename.nii', :input_directory => @dataset.directory)[0].should == "to3d -session /tmp/ -prefix filename.nii #{@dataset.directory}/'*.dcm'"
34
- nifti_conversion_command, nifti_output_file = @dataset.to_nifti!('/tmp/', 'filename.nii', :input_directory => @dataset.directory)
35
- nifti_conversion_command.should == "to3d -session /tmp/ -prefix filename.nii #{@dataset.directory}/'*.dcm'"
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
- @visit.scan
54
+ @visit_unzipped.scan
42
55
 
43
- @visit.datasets.each do |ds|
56
+ @visit_unzipped.datasets.each do |ds|
44
57
  begin
45
- nifti_filename = "#{@visit.scanid}_#{ds.escape_filename(ds.series_description)}_#{File.basename(ds.directory)}.nii"
46
- nifti_conversion_commmand, nifti_output_file = ds.to_nifti!(File.join(Dir.tmpdir, @visit.default_preprocess_directory), nifti_filename, :input_directory => ds.directory, :append_modality_directory => true )
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(@visit.default_preprocess_directory, 'unknown')
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.9
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-22 00:00:00 -06:00
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