metamri 0.1.17 → 0.1.18

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/Rakefile CHANGED
@@ -28,6 +28,8 @@ begin
28
28
  gemspec.homepage = "http://github.com/brainmap/metamri"
29
29
  gemspec.authors = ["Kristopher J. Kosmatka"]
30
30
  gemspec.add_dependency('sqlite3-ruby')
31
+ gemspec.add_dependency('dicom')
32
+ # gemspec.add_dependency('rmagick')
31
33
  gemspec.add_development_dependency('rspec')
32
34
  end
33
35
  Jeweler::GemcutterTasks.new
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.17
1
+ 0.1.18
data/bin/import_study.rb CHANGED
@@ -28,11 +28,10 @@
28
28
  #
29
29
 
30
30
  $:.unshift File.join(File.dirname(__FILE__),'..','lib')
31
-
32
- require 'visit_raw_data_directory'
33
31
  require 'pathname'
34
32
  require 'rdoc/usage'
35
33
  require 'logger'
34
+ require 'metamri'
36
35
 
37
36
  #:stopdoc:
38
37
  STUDIES = {
data/bin/import_visit.rb CHANGED
@@ -32,11 +32,10 @@
32
32
  #
33
33
 
34
34
  $:.unshift File.join(File.dirname(__FILE__),'..','lib')
35
-
36
- require 'visit_raw_data_directory'
37
35
  require 'pathname'
38
36
  require 'rdoc/usage'
39
37
  require 'logger'
38
+ require 'metamri'
40
39
 
41
40
  # == Function
42
41
  # Imports imaging data collected during a single visit into the WADRC Data Tools web application database.
@@ -56,7 +56,7 @@ class Pathname
56
56
  def first_dicom
57
57
  entries.each do |leaf|
58
58
  branch = self + leaf
59
- if leaf.to_s =~ /^I\.|\.dcm(\.bz2)?$|\.0[0-9]+(\.bz2)?$/
59
+ if leaf.to_s =~ /^I\.|\.dcm(\.bz2)?$|\.[0-9]+(\.bz2)?$/
60
60
  lc = branch.local_copy
61
61
  begin
62
62
  yield lc
@@ -77,7 +77,7 @@ class Pathname
77
77
 
78
78
  entries.each do |leaf|
79
79
  branch = self + leaf
80
- if leaf.to_s =~ /^I\.|\.dcm(\.bz2)?$|\.0[0-9]+(\.bz2)?$/
80
+ if leaf.to_s =~ /^I\.(\.bz2)?$|\.dcm(\.bz2)?$|\.[0-9]+(\.bz2)?$/
81
81
  local_copies << branch.local_copy(tempdir)
82
82
  end
83
83
  end
@@ -18,7 +18,7 @@ module UnknownImageDataset
18
18
  else input_files = "#{Dir.tmpdir}/'#{glob}'"
19
19
  end
20
20
 
21
- if @raw_image_files.first.rep_time && @raw_image_files.first.bold_reps && @raw_image_files.first.num_slices
21
+ if @raw_image_files.first.rep_time && @raw_image_files.first.bold_reps && @raw_image_files.first.num_slices && !input_options[:no_timing_options]
22
22
  slice_order = "altplus"
23
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
24
  end
@@ -29,7 +29,7 @@ module UnknownImageDataset
29
29
  File.makedirs(nifti_output_directory) unless File.directory?(nifti_output_directory)
30
30
  raise(IOError, "Cannot write to #{nifti_output_directory}") unless File.writable?(nifti_output_directory)
31
31
 
32
- nifti_conversion_command = "to3d -session #{nifti_output_directory} -prefix #{nifti_filename} #{functional_args} #{input_files}"
32
+ nifti_conversion_command = "to3d -session #{nifti_output_directory} -prefix #{[nifti_filename, functional_args, input_files].compact.join(' ')}"
33
33
 
34
34
  return nifti_conversion_command, nifti_output_file
35
35
  end
@@ -21,6 +21,8 @@ class RawImageDataset
21
21
  attr_reader :rmr_number
22
22
  # From the first raw image file in the dataset
23
23
  attr_reader :timestamp
24
+ # From the first raw image file in the dataset
25
+ attr_reader :study_id
24
26
  # A key string unique to a dataset composed of the rmr number and the timestamp.
25
27
  attr_reader :dataset_key
26
28
  # the file scanned
@@ -51,17 +53,26 @@ class RawImageDataset
51
53
  raise(IndexError, im.to_s + " is not a RawImageFile") if im.class.to_s != "RawImageFile"
52
54
  end
53
55
  @raw_image_files = raw_image_files
56
+
54
57
  @series_description = @raw_image_files.first.series_description
55
58
  raise(IndexError, "No series description found") if @series_description.nil?
59
+
56
60
  @rmr_number = @raw_image_files.first.rmr_number
57
61
  raise(IndexError, "No rmr found") if @rmr_number.nil?
62
+
58
63
  @timestamp = get_earliest_timestamp
59
64
  raise(IndexError, "No timestamp found") if @timestamp.nil?
65
+
60
66
  @dataset_key = @rmr_number + "::" + @timestamp.to_s
67
+
61
68
  @scanned_file = @raw_image_files.first.filename
62
69
  raise(IndexError, "No scanned file found") if @scanned_file.nil?
70
+
63
71
  @scanner_source = @raw_image_files.first.source
64
72
  raise(IndexError, "No scanner source found") if @scanner_source.nil?
73
+
74
+ @study_id = @raw_image_files.first.study_id.nil? ? nil : @raw_image_files.first.study_id
75
+ # raise(IndexError, "No study id / exam number found") if @study_id.nil?
65
76
 
66
77
  $LOG ||= Logger.new(STDOUT)
67
78
  end
@@ -165,7 +176,14 @@ Returns a path to the created dataset as a string if successful.
165
176
  begin
166
177
  nifti_conversion_command, nifti_output_file = to_nifti(nifti_output_directory, nifti_filename, input_options)
167
178
  puts nifti_conversion_command
168
- system "#{nifti_conversion_command}"
179
+ begin
180
+ system "#{nifti_conversion_command}"
181
+ raise ScriptError, "#{nifti_output_file} does not exist." unless File.exist?(nifti_output_file)
182
+ rescue ScriptError => e
183
+ input_options[:no_timing_options] = true
184
+ nifti_conversion_command, nifti_output_file = to_nifti(nifti_output_directory, nifti_filename, input_options)
185
+ system "#{nifti_conversion_command}"
186
+ end
169
187
  raise(IOError, "Could not convert image dataset: #{@directory} to #{nifti_output_file}") unless $? == 0
170
188
  rescue IOError => e
171
189
  $LOG.warn "-- Warning: #{e.message}"
@@ -1,5 +1,5 @@
1
1
  require 'dicom'
2
- require 'rmagick'
2
+ require 'RMagick'
3
3
  require 'tmpdir'
4
4
 
5
5
  # This class is a ruby object encapsulating a .png 2D Thumbnail of a Dataset
@@ -36,6 +36,8 @@ class RawImageFile
36
36
  attr_reader :source
37
37
  # An identifier unique to a 'visit', these are assigned by the scanner techs at scan time.
38
38
  attr_reader :rmr_number
39
+ # An identifier unique to a Study Session - AKA Exam Number
40
+ attr_reader :study_id
39
41
  # A short string describing the acquisition sequence. These come from the scanner.
40
42
  # code and are used to initialise SeriesDescription objects to find related attributes.
41
43
  attr_reader :series_description
@@ -300,79 +302,84 @@ Extracts a collection of metadata from @hdr_data retrieved using the dicom_hdr
300
302
  utility.
301
303
  =end
302
304
  def dicom_hdr_import
303
- meta_matchers = {}
304
- meta_matchers[:rmr_number] = {
305
+ dicom_tag_templates = {}
306
+ dicom_tag_templates[:rmr_number] = {
305
307
  :type => :string,
306
308
  :pat => /[ID Accession Number|ID Study Description]\/\/(RMR.*)\n/i,
307
309
  :required => true
308
310
  }
309
- meta_matchers[:slice_thickness] = {
311
+ dicom_tag_templates[:study_id] = {
312
+ :type => :string,
313
+ :pat => /STUDY ID\/\/([0-9]+)/i,
314
+ :required => true
315
+ }
316
+ dicom_tag_templates[:slice_thickness] = {
310
317
  :type => :float,
311
318
  :pat => /ACQ SLICE THICKNESS\/\/(.*)\n/i,
312
319
  :required => false
313
320
  }
314
- meta_matchers[:slice_spacing] = {
321
+ dicom_tag_templates[:slice_spacing] = {
315
322
  :type => :float,
316
323
  :pat => /ACQ SPACING BETWEEN SLICES\/\/(.*)\n/i,
317
324
  :required => false
318
325
  }
319
- meta_matchers[:source] = {
326
+ dicom_tag_templates[:source] = {
320
327
  :type => :string,
321
328
  :pat => /ID INSTITUTION NAME\/\/(.*)\n/i,
322
329
  :required => true
323
330
  }
324
- meta_matchers[:series_description] = {
331
+ dicom_tag_templates[:series_description] = {
325
332
  :type => :string,
326
333
  :pat => /ID SERIES DESCRIPTION\/\/(.*)\n/i,
327
334
  :required => true
328
335
  }
329
- meta_matchers[:gender] = {
336
+ dicom_tag_templates[:gender] = {
330
337
  :type => :string,
331
338
  :pat => /PAT PATIENT SEX\/\/(.)/i,
332
339
  :required => false
333
340
  }
334
- meta_matchers[:reconstruction_diameter] = {
341
+ dicom_tag_templates[:reconstruction_diameter] = {
335
342
  :type => :int,
336
343
  :pat => /ACQ RECONSTRUCTION DIAMETER\/\/([0-9]+)/i,
337
344
  :required => false
338
345
  }
339
- meta_matchers[:acquisition_matrix_x] = {
346
+ dicom_tag_templates[:acquisition_matrix_x] = {
340
347
  :type => :int,
341
348
  :pat => /IMG Rows\/\/ ([0-9]+)/i,
342
349
  :required => false
343
350
  }
344
- meta_matchers[:acquisition_matrix_y] = {
351
+ dicom_tag_templates[:acquisition_matrix_y] = {
345
352
  :type => :int,
346
353
  :pat => /IMG Columns\/\/ ([0-9]+)/i,
347
354
  :required => false
348
355
  }
349
- meta_matchers[:num_slices] = {
356
+ dicom_tag_templates[:num_slices] = {
350
357
  :type => :int,
351
358
  :pat => /REL Images in Acquisition\/\/([0-9]+)/i,
352
359
  :required => false
353
360
  }
354
- meta_matchers[:bold_reps] = {
361
+ dicom_tag_templates[:bold_reps] = {
355
362
  :type => :int,
356
363
  :pat => /REL Number of Temporal Positions\/\/([0-9]+)/i,
357
364
  :required => false
358
365
  }
359
- meta_matchers[:rep_time] = {
366
+ dicom_tag_templates[:rep_time] = {
360
367
  :type => :float,
361
368
  :pat => /ACQ Repetition Time\/\/(.*)\n/i,
362
369
  :required => false
363
370
  }
364
- meta_matchers[:date] = {
371
+ dicom_tag_templates[:date] = {
365
372
  :type => :datetime,
366
373
  :pat => /ID STUDY DATE\/\/(.*)\n/i #,
367
374
  # :required => false
368
375
  }
369
- meta_matchers[:time] = {
376
+ dicom_tag_templates[:time] = {
370
377
  :type => :datetime,
371
378
  :pat => /ID Series Time\/\/(.*)\n/i #,
372
379
  # :required => false
373
380
  }
374
381
 
375
- meta_matchers.each_pair do |name, tag_hash|
382
+ dicom_tag_templates.each_pair do |name, tag_hash|
376
383
  begin
377
384
  next if tag_hash[:type] == :datetime
378
385
  tag_hash[:pat] =~ @hdr_data
@@ -393,9 +400,9 @@ utility.
393
400
  end
394
401
 
395
402
  # Set Timestamp separately because it requires both Date and Time to be extracted.
396
- meta_matchers[:date][:pat] =~ @hdr_data
403
+ dicom_tag_templates[:date][:pat] =~ @hdr_data
397
404
  date = $1
398
- meta_matchers[:time][:pat] =~ @hdr_data
405
+ dicom_tag_templates[:time][:pat] =~ @hdr_data
399
406
  time = $1
400
407
  @timestamp = DateTime.parse(date + time)
401
408
 
@@ -48,6 +48,8 @@ class VisitRawDataDirectory
48
48
  attr_reader :scan_procedure_name
49
49
  # scanner source
50
50
  attr_accessor :scanner_source
51
+ # scanner-defined study id / exam number
52
+ attr_accessor :study_id
51
53
  #
52
54
  attr_accessor :db
53
55
  # Scan ID is the short name for the scan (tbiva018, tbiva018b)
@@ -71,6 +73,7 @@ class VisitRawDataDirectory
71
73
  @rmr_number = nil
72
74
  @scan_procedure_name = scan_procedure_name.nil? ? get_scan_procedure_based_on_raw_directory : scan_procedure_name
73
75
  @db = nil
76
+ @study_id = nil
74
77
  initialize_log
75
78
  end
76
79
 
@@ -94,6 +97,7 @@ class VisitRawDataDirectory
94
97
  @timestamp = get_visit_timestamp
95
98
  @rmr_number = get_rmr_number
96
99
  @scanner_source = get_scanner_source
100
+ @study_id = get_study_id
97
101
  flash "Completed scanning #{@visit_directory}" if $LOG.level <= Logger::DEBUG
98
102
  else
99
103
  raise(IndexError, "No datasets could be scanned for directory #{@visit_directory}")
@@ -106,7 +110,8 @@ class VisitRawDataDirectory
106
110
  :date => @timestamp.to_s,
107
111
  :rmr => @rmr_number,
108
112
  :path => @visit_directory,
109
- :scanner_source => get_scanner_source
113
+ :scanner_source => @scanner_source ||= get_scanner_source,
114
+ :scan_number => @study_id
110
115
  }
111
116
  end
112
117
 
@@ -183,7 +188,7 @@ Returns an array of the created nifti files.
183
188
  def to_s
184
189
  puts; @visit_directory.length.times { print "-" }; puts
185
190
  puts "#{@visit_directory}"
186
- puts "#{@rmr_number} - #{@timestamp.strftime('%F')} - #{@scanner_source}"
191
+ puts "#{@rmr_number} - #{@timestamp.strftime('%F')} - #{@scanner_source} - #{@study_id unless @study_id.nil?}"
187
192
  puts
188
193
  puts RawImageDataset.to_table(@datasets)
189
194
  return
@@ -363,6 +368,14 @@ generates an sql insert statement to insert this visit with a given participant
363
368
  raise(IOError, "No valid scanner source found for this visit")
364
369
  end
365
370
 
371
+ # retrieves exam number / scan id from first #RawImageDataset
372
+ def get_study_id
373
+ @datasets.each do |ds|
374
+ return ds.study_id unless ds.study_id.nil?
375
+ end
376
+ # raise(IOError, "No valid study id / exam number found.")
377
+ end
378
+
366
379
  def get_scan_procedure_based_on_raw_directory
367
380
  case @visit_directory
368
381
  when /alz_2000.*_2$/
data/lib/metamri.rb CHANGED
@@ -4,10 +4,12 @@ require 'metamri/core_additions'
4
4
  require 'metamri/raw_image_file'
5
5
  require 'metamri/raw_image_dataset'
6
6
  require 'metamri/visit_raw_data_directory'
7
- require 'metamri/raw_image_dataset_thumbnail'
8
7
  require 'metamri/raw_image_dataset_resource'
9
8
  require 'metamri/visit_raw_data_directory_resource'
10
9
 
10
+ # require 'metamri/raw_image_dataset_thumbnail'
11
+ # TODO Move raw_image_dataset_thumbnail out of metamri.
12
+
11
13
  begin
12
14
  require 'hirb'
13
15
  rescue LoadError
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.17"
8
+ s.version = "0.1.18"
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-05-07}
12
+ s.date = %q{2010-06-04}
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 = ["import_study.rb", "import_visit.rb", "import_respiratory_files.rb", "list_visit", "convert_visit.rb"]
@@ -67,13 +67,16 @@ Gem::Specification.new do |s|
67
67
 
68
68
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
69
69
  s.add_runtime_dependency(%q<sqlite3-ruby>, [">= 0"])
70
+ s.add_runtime_dependency(%q<dicom>, [">= 0"])
70
71
  s.add_development_dependency(%q<rspec>, [">= 0"])
71
72
  else
72
73
  s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
74
+ s.add_dependency(%q<dicom>, [">= 0"])
73
75
  s.add_dependency(%q<rspec>, [">= 0"])
74
76
  end
75
77
  else
76
78
  s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
79
+ s.add_dependency(%q<dicom>, [">= 0"])
77
80
  s.add_dependency(%q<rspec>, [">= 0"])
78
81
  end
79
82
  end
@@ -4,14 +4,11 @@ require 'rubygems'
4
4
  require 'spec'
5
5
  require 'fileutils'
6
6
  require 'tmpdir'
7
- require 'metamri/core_additions'
8
- require 'visit_raw_data_directory'
9
- require 'raw_image_dataset'
10
- require 'raw_image_file'
7
+ require 'metamri'
11
8
 
12
- VISIT_FIXTURE_SRC = '/Data/vtrak1/raw/johnson.tbi-va.visit1/tbiva018b_9336_12022009'
13
- VISIT_FIXTURE = File.join(Dir.tmpdir, 'fixtures/visit_raw_data_directory/tbiva018b_9336_12022009')
14
- VISIT_FIXTURE_UNZIPPED = File.join(Dir.tmpdir, 'fixtures/visit_raw_data_directory/tbiva018b_9336_12022009_unzipped')
9
+ VISIT_FIXTURE_SRC = '/Data/vtrak1/raw/johnson.tbi-va.visit1/tbiva034_10019_04212010'
10
+ VISIT_FIXTURE = File.join(Dir.tmpdir, 'fixtures/visit_raw_data_directory/tbiva034_10019_04212010')
11
+ VISIT_FIXTURE_UNZIPPED = File.join(Dir.tmpdir, 'fixtures/visit_raw_data_directory/tbiva034_10019_04212010_unzipped')
15
12
 
16
13
 
17
14
 
@@ -102,7 +99,7 @@ describe "Convert Unknown Dicoms to Nifti Files" do
102
99
  end
103
100
 
104
101
  it "should guess scan id" do
105
- @visit.scanid.should == 'tbiva018b'
102
+ @visit.scanid.should == 'tbiva034'
106
103
 
107
104
  v = VisitRawDataDirectory.new('/Data/vtrak1/preprocessed/visits/asthana.adrc-clinical-core.visit1/adrc00001', 'asthana.adrc-clinical-core.visit1')
108
105
  v.scanid.should == 'adrc00001'
@@ -4,8 +4,8 @@
4
4
  $:.unshift File.join(File.dirname(__FILE__),'..','lib')
5
5
 
6
6
  require 'test/unit'
7
- require 'raw_image_dataset'
8
- require 'raw_image_file'
7
+ require 'metamri/raw_image_dataset'
8
+ require 'metamri/raw_image_file'
9
9
 
10
10
  class RawImageDatasetTest < Test::Unit::TestCase
11
11
  DBFILE = 'fixtures/development.sqlite3'
@@ -3,9 +3,10 @@ $:.unshift File.join(File.dirname(__FILE__),'..','lib')
3
3
  require 'spec'
4
4
  require 'escoffier'
5
5
  require 'tmpdir'
6
- require 'raw_image_dataset'
7
- require 'raw_image_file'
8
- require 'metamri'
6
+ # require 'metamri'
7
+ require 'metamri/core_additions'
8
+ require 'metamri/raw_image_dataset'
9
+ require 'metamri/raw_image_file'
9
10
  require 'metamri/raw_image_dataset_thumbnail'
10
11
 
11
12
  describe "Create a thumbnail png for display." do
@@ -4,29 +4,29 @@
4
4
  $:.unshift File.join(File.dirname(__FILE__),'..','lib')
5
5
 
6
6
  require 'test/unit'
7
- require 'raw_image_file'
7
+ require 'metamri/raw_image_file'
8
8
 
9
9
  class RawImageFileTest < Test::Unit::TestCase
10
10
  def setup
11
- @GEDicom = 'fixtures/I.001'
12
- @DiDicom = 'fixtures/S4_EFGRE3D.0001'
11
+ @GE_IFile = 'fixtures/I.001'
12
+ @Dicom = 'fixtures/S4_EFGRE3D.0001'
13
13
  @EarlyGEPfile = 'fixtures/P59392.7'
14
14
  @LateGEPfile = 'fixtures/P27648.7'
15
15
  @notafile = 'fixtures/XXX.XXX'
16
- @ged = RawImageFile.new(@GEDicom)
17
- @did = RawImageFile.new(@DiDicom)
16
+ @ged = RawImageFile.new(@GE_IFile)
17
+ @did = RawImageFile.new(@Dicom)
18
18
  @egep = RawImageFile.new(@EarlyGEPfile)
19
19
  @lgep = RawImageFile.new(@LateGEPfile)
20
20
  end
21
21
 
22
22
  def test_gehdr_dicom_init
23
23
  assert_nothing_raised do
24
- RawImageFile.new(@GEDicom)
24
+ RawImageFile.new(@GE_IFile)
25
25
  end
26
26
  end
27
27
  def test_dicomhdr_dicom_init
28
28
  assert_nothing_raised do
29
- RawImageFile.new(@DiDicom)
29
+ RawImageFile.new(@Dicom)
30
30
  end
31
31
  end
32
32
  def test_early_gehdr_pfile_init
@@ -4,8 +4,8 @@
4
4
  $:.unshift File.join(File.dirname(__FILE__),'..','lib')
5
5
 
6
6
  require 'test/unit'
7
- require 'visit'
8
7
  require 'pathname'
8
+ require 'metamri'
9
9
 
10
10
 
11
11
  class RawImageFileTest < Test::Unit::TestCase
@@ -16,7 +16,7 @@ class RawImageFileTest < Test::Unit::TestCase
16
16
  end
17
17
 
18
18
  def test_scan_and_insert
19
- @v = Visit.new( '/Data/vtrak1/raw/alz_2000/alz093', 'ALZ' )
19
+ @v = VisitRawDataDirectory.new( '/Data/vtrak1/raw/alz_2000/alz093', 'ALZ' )
20
20
  @v.scan
21
21
  @v.init_db(DBFILE)
22
22
  @v.db_insert!
data/test/visit_test.rb CHANGED
@@ -9,7 +9,7 @@ require 'logger'
9
9
  require 'metamri'
10
10
 
11
11
  class RawImageFileTest < Test::Unit::TestCase
12
- DBFILE = '/Users/kris/projects/TransferScans/db/development.sqlite3'
12
+ DBFILE = '~/code/WADRC-Data-Tools/db/development.sqlite3'
13
13
  $LOG = Logger.new('visit_test.log', shift_age = 7, shift_size = 1048576)
14
14
  STUDIES = [
15
15
  # Pathname.new('/Data/vtrak1/raw/alz_2000'),
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 17
9
- version: 0.1.17
8
+ - 18
9
+ version: 0.1.18
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-05-07 00:00:00 -05:00
17
+ date: 2010-06-04 00:00:00 -05:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -30,7 +30,7 @@ dependencies:
30
30
  type: :runtime
31
31
  version_requirements: *id001
32
32
  - !ruby/object:Gem::Dependency
33
- name: rspec
33
+ name: dicom
34
34
  prerelease: false
35
35
  requirement: &id002 !ruby/object:Gem::Requirement
36
36
  requirements:
@@ -39,8 +39,20 @@ dependencies:
39
39
  segments:
40
40
  - 0
41
41
  version: "0"
42
- type: :development
42
+ type: :runtime
43
43
  version_requirements: *id002
44
+ - !ruby/object:Gem::Dependency
45
+ name: rspec
46
+ prerelease: false
47
+ requirement: &id003 !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ segments:
52
+ - 0
53
+ version: "0"
54
+ type: :development
55
+ version_requirements: *id003
44
56
  description: Extraction of MRI metadata and insertion into compatible sqlite3 databases.
45
57
  email: kk4@medicine.wisc.edu
46
58
  executables: