metamri 0.1.5 → 0.1.6

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 CHANGED
@@ -1 +1 @@
1
- 0.1.5
1
+ 0.1.6
@@ -42,7 +42,7 @@ require 'logger'
42
42
  #
43
43
  #
44
44
  def convert_visit(raw_directory, scan_procedure_codename, output_directory = nil)
45
- log = Logger.new(File.basename(raw_directory))
45
+ $LOG = Logger.new(File.join(Dir.tmpdir, File.basename(raw_directory)))
46
46
  v = VisitRawDataDirectory.new(raw_directory, scan_procedure_codename)
47
47
  puts "+++ Converting #{v.visit_directory} as part of #{v.scan_procedure_name} +++"
48
48
  output_directory = output_directory ||= v.default_preprocess_directory
@@ -53,8 +53,8 @@ def convert_visit(raw_directory, scan_procedure_codename, output_directory = nil
53
53
  rescue Exception => e
54
54
  puts "There was a problem scanning a dataset in #{v.visit_directory}... skipping."
55
55
  puts "Exception message: #{e.message}"
56
- log.error "There was a problem scanning a dataset in #{v.visit_directory}... skipping."
57
- log.error "Exception message: #{e.message}"
56
+ $LOG.error "There was a problem scanning a dataset in #{v.visit_directory}... skipping."
57
+ $LOG.error "Exception message: #{e.message}"
58
58
  ensure
59
59
  v = nil
60
60
  end
@@ -0,0 +1,87 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # == Synopsis
4
+ #
5
+ # == Examples
6
+ #
7
+ # == Usage
8
+ #
9
+ # == Options
10
+ #
11
+ # == Author
12
+ #
13
+ # == Copyright
14
+ # Copyright (c) 2010 WADRC Imaging Core.
15
+ #
16
+
17
+ $:.unshift File.join(File.dirname(__FILE__),'..','lib')
18
+
19
+ require 'metamri'
20
+ require 'pathname'
21
+ require 'rdoc/usage'
22
+ require 'logger'
23
+
24
+ # Assumptions: Respiratory files are large and in order.
25
+ def match_respiratory_files(path)
26
+ #File.join(Dir.tmpdir, File.basename(path), DateTime.now.to_s)
27
+ $LOG = Logger.new($stdout)
28
+ $LOG.level = Logger::INFO
29
+ path = File.expand_path(path)
30
+
31
+ raw_directory = '/tmp/awr001_7854_02102009'
32
+ visit = VisitRawDataDirectory.new(raw_directory)
33
+ visit.scan
34
+ visit_epi_files = Array.new
35
+ visit.datasets.each do |dataset|
36
+ $LOG.debug dataset.series_description
37
+ visit_epi_files << dataset.directory if dataset.series_description =~ /fMRI/i
38
+ end
39
+ $LOG.debug visit_epi_files
40
+
41
+ large_files = Array.new
42
+
43
+ Dir.open(path) do |dir|
44
+ dir.each do |file|
45
+ next if File.directory?(file)
46
+ if file =~ /^ECGData.*/
47
+ line_count = open(file) { |f| f.readlines}.length
48
+ large_files << file if line_count >= 1000
49
+ $LOG.debug "#{file}, #{line_count}"
50
+ end
51
+ end
52
+ end
53
+ $LOG.debug large_files
54
+
55
+ timestamps = Array.new
56
+
57
+ large_files.each do |large_file|
58
+ timestamps << large_file.gsub(/ECGData_epiRT_/, '')
59
+ end
60
+
61
+ $LOG.debug timestamps
62
+
63
+ return visit_epi_files.zip(timestamps)
64
+ end
65
+
66
+ def create_spec
67
+ spec_file = 'respiratory_fixtures.yaml'
68
+
69
+ runs = YAML::load_file(spec_file)
70
+
71
+ runs.each do |run|
72
+ options = [['--card', run['cardiac_data']], ['--resp', run['respiratory_data']], ['--ox', run['cardiac_trigger']]]
73
+ system("PhysioNoise.py #{options.flatten.join(" ")}")
74
+ end
75
+
76
+ end
77
+
78
+
79
+ if File.basename(__FILE__) == File.basename($PROGRAM_NAME)
80
+ RDoc::usage() if (ARGV[0] == '-h')
81
+ path = ARGV[0]
82
+
83
+ resp_files = match_respiratory_files(path)
84
+ resp_files.each do |resp_file|
85
+ puts "#{resp_file[0]}, #{resp_file[1]}"
86
+ end
87
+ end
@@ -7,6 +7,10 @@ Builds Nifti files from Dicoms.
7
7
  TO3D_CMD = 'to3d'
8
8
 
9
9
  module UnknownImageDataset
10
+ # Always set AFNI GE DICOM Fix to "No" before conversion with to3d.
11
+ ENV['AFNI_SLICE_SPACING_IS_GAP'] == "NO"
12
+
13
+
10
14
  def dataset_to_nifti(nifti_output_directory, nifti_filename, input_options = {} )
11
15
  if input_options.has_key?(:dicom_files)
12
16
  input_files = input_options[:dicom_files].each {|file| file.to_s }.join(' ')
@@ -181,7 +181,7 @@ have more component files than shell commands can handle.
181
181
  Does same basic string replacements to ensure valid filenames.
182
182
  =end
183
183
  def escape_filename(filename)
184
- filename.mgsub([[/[\s\:\)\(]+/, "-"], [/\*/, "star"]])
184
+ filename.mgsub([[/[\s\:\)\(\/]+/, "-"], [/\*/, "star"]])
185
185
  end
186
186
 
187
187
  private
@@ -17,6 +17,7 @@ def flash(msg)
17
17
  printf "\t%s\n", Time.now
18
18
  puts "+" * 120
19
19
  puts
20
+ $LOG.info msg if $LOG
20
21
  end
21
22
 
22
23
 
@@ -159,7 +160,8 @@ Returns an array of the created nifti files.
159
160
  nifti_filename = "#{scanid}_#{dataset.escape_filename(dataset.series_description)}_#{File.basename(dataset.directory)}.nii"
160
161
 
161
162
  Pathname.new(dataset.directory).all_dicoms do |dicom_files|
162
- nifti_conversion_command, nifti_output_file = dataset.to_nifti!(nifti_output_path, nifti_filename, :input_directory => @working_directory, :append_modality_directory => true)
163
+ nifti_input_path = File.dirname(dicom_files.first)
164
+ nifti_conversion_command, nifti_output_file = dataset.to_nifti!(nifti_output_path, nifti_filename, :input_directory => nifti_input_path, :append_modality_directory => true)
163
165
  nifti_output_files << nifti_output_file
164
166
  end
165
167
  end
@@ -444,19 +446,21 @@ class Pathname
444
446
 
445
447
  def all_dicoms
446
448
  local_copies = []
447
- begin
449
+ Dir.mktmpdir do |tempdir|
450
+ begin
448
451
 
449
- entries.each do |leaf|
450
- branch = self + leaf
451
- if leaf.to_s =~ /^I\.|\.dcm(\.bz2)?$|\.0[0-9]+(\.bz2)?$/
452
- local_copies << branch.local_copy
452
+ entries.each do |leaf|
453
+ branch = self + leaf
454
+ if leaf.to_s =~ /^I\.|\.dcm(\.bz2)?$|\.0[0-9]+(\.bz2)?$/
455
+ local_copies << branch.local_copy(tempdir)
456
+ end
453
457
  end
454
- end
455
458
 
456
- yield local_copies
459
+ yield local_copies
457
460
 
458
- ensure
459
- local_copies.each { |lc| lc.delete }
461
+ ensure
462
+ local_copies.each { |lc| lc.delete }
463
+ end
460
464
  end
461
465
 
462
466
  return
@@ -464,9 +468,9 @@ class Pathname
464
468
 
465
469
 
466
470
 
467
- def local_copy
471
+ def local_copy(tempdir = Dir.tmpdir)
468
472
  tfbase = self.to_s =~ /\.bz2$/ ? self.basename.to_s.chomp(".bz2") : self.basename.to_s
469
- tmpfile = File.join(Dir.tmpdir, tfbase)
473
+ tmpfile = File.join(tempdir, tfbase)
470
474
  if self.to_s =~ /\.bz2$/
471
475
  `bunzip2 -k -c #{self.to_s} >> #{tmpfile}`
472
476
  else
@@ -5,14 +5,14 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{metamri}
8
- s.version = "0.1.5"
8
+ s.version = "0.1.6"
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{2009-12-18}
12
+ s.date = %q{2010-01-19}
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", "import_visit.rb", "convert_visit.rb"]
15
+ s.executables = ["convert_visit.rb", "import_study.rb", "import_visit.rb", "import_respiratory_files.rb"]
16
16
  s.extra_rdoc_files = [
17
17
  "README.rdoc"
18
18
  ]
@@ -23,6 +23,7 @@ Gem::Specification.new do |s|
23
23
  "Rakefile",
24
24
  "VERSION",
25
25
  "bin/convert_visit.rb",
26
+ "bin/import_respiratory_files.rb",
26
27
  "bin/import_study.rb",
27
28
  "bin/import_visit.rb",
28
29
  "lib/metamri.rb",
@@ -33,6 +34,7 @@ Gem::Specification.new do |s|
33
34
  "lib/series_description_parameters.rb",
34
35
  "lib/visit_raw_data_directory.rb",
35
36
  "metamri.gemspec",
37
+ "test/fixtures/respiratory_fixtures.yaml",
36
38
  "test/nifti_builder_spec.rb",
37
39
  "test/raw_image_dataset_test.rb",
38
40
  "test/raw_image_file_test.rb",
@@ -45,11 +47,11 @@ Gem::Specification.new do |s|
45
47
  s.rubygems_version = %q{1.3.5}
46
48
  s.summary = %q{MRI metadata}
47
49
  s.test_files = [
48
- "test/raw_image_dataset_test.rb",
50
+ "test/nifti_builder_spec.rb",
51
+ "test/raw_image_dataset_test.rb",
49
52
  "test/raw_image_file_test.rb",
50
53
  "test/visit_duplication_test.rb",
51
- "test/visit_test.rb",
52
- "test/nifti_builder_spec.rb"
54
+ "test/visit_test.rb"
53
55
  ]
54
56
 
55
57
  if s.respond_to? :specification_version then
@@ -0,0 +1,11 @@
1
+ fMRI ASSET RUN 1:
2
+ cardiac_data: ECGData_epiRT_0210200914_22_58
3
+ respiratory_data: RespData_epiRT_0210200914_22_58
4
+ cardiac_trigger: TrigEcg_epiRT_0210200914_22_58
5
+ respiratory_trigger: TrigResp_epiRT_0210200914_22_58
6
+
7
+ fMRI ASSET RUN 2:
8
+ cardiac_data: ECGData_epiRT_0210200914_22_58
9
+ respiratory_data: RespData_epiRT_0210200914_22_58
10
+ cardiac_trigger: TrigEcg_epiRT_0210200914_22_58
11
+ respiratory_trigger: TrigResp_epiRT_0210200914_22_58
@@ -59,8 +59,9 @@ describe "Convert Unknown Dicoms to Nifti Files" do
59
59
  nifti_conversion_command.should == "to3d -session /tmp -prefix 001.nii /tmp/'*.dcm'"
60
60
 
61
61
 
62
+ nifti_input_path = File.dirname(dicom_files.first)
62
63
  nifti_conversion_command, nifti_output_file = @dataset.to_nifti(nifti_output_path, nifti_filename, :dicom_files => dicom_files)
63
- nifti_conversion_command.should == "to3d -session /tmp -prefix 001.nii #{Dir.tmpdir}/I0001.dcm #{Dir.tmpdir}/I0002.dcm #{Dir.tmpdir}/I0003.dcm #{Dir.tmpdir}/I0004.dcm #{Dir.tmpdir}/I0005.dcm #{Dir.tmpdir}/I0006.dcm #{Dir.tmpdir}/I0007.dcm #{Dir.tmpdir}/I0008.dcm #{Dir.tmpdir}/I0009.dcm #{Dir.tmpdir}/I0010.dcm #{Dir.tmpdir}/I0011.dcm #{Dir.tmpdir}/I0012.dcm #{Dir.tmpdir}/I0013.dcm #{Dir.tmpdir}/I0014.dcm #{Dir.tmpdir}/I0015.dcm"
64
+ nifti_conversion_command.should == "to3d -session /tmp -prefix 001.nii #{dicom_files.each {|dicom| dicom}.join(" ")}"
64
65
 
65
66
  end
66
67
  end
@@ -10,7 +10,7 @@ require 'logger'
10
10
 
11
11
  class RawImageFileTest < Test::Unit::TestCase
12
12
  DBFILE = '/Users/kris/projects/TransferScans/db/development.sqlite3'
13
- LOG = Logger.new('visit_test.log', shift_age = 7, shift_size = 1048576)
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'),
16
16
  # Pathname.new('/Data/vtrak1/raw/alz_2000'),
@@ -65,8 +65,8 @@ class RawImageFileTest < Test::Unit::TestCase
65
65
  rescue Exception => e
66
66
  puts "There was a problem scanning a dataset in #{visitdir}... skipping."
67
67
  puts "Exception message: #{e.message}"
68
- LOG.error "There was a problem scanning a dataset in #{visitdir}... skipping."
69
- LOG.error "Exception message: #{e.message}"
68
+ $LOG.error "There was a problem scanning a dataset in #{visitdir}... skipping."
69
+ $LOG.error "Exception message: #{e.message}"
70
70
  ensure
71
71
  v = nil
72
72
  end
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.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kristopher J. Kosmatka
@@ -9,16 +9,17 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-12-18 00:00:00 -06:00
12
+ date: 2010-01-19 00:00:00 -06:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
16
16
  description: Extraction of MRI metadata and insertion into compatible sqlite3 databases.
17
17
  email: kk4@medicine.wisc.edu
18
18
  executables:
19
+ - convert_visit.rb
19
20
  - import_study.rb
20
21
  - import_visit.rb
21
- - convert_visit.rb
22
+ - import_respiratory_files.rb
22
23
  extensions: []
23
24
 
24
25
  extra_rdoc_files:
@@ -30,6 +31,7 @@ files:
30
31
  - Rakefile
31
32
  - VERSION
32
33
  - bin/convert_visit.rb
34
+ - bin/import_respiratory_files.rb
33
35
  - bin/import_study.rb
34
36
  - bin/import_visit.rb
35
37
  - lib/metamri.rb
@@ -40,6 +42,7 @@ files:
40
42
  - lib/series_description_parameters.rb
41
43
  - lib/visit_raw_data_directory.rb
42
44
  - metamri.gemspec
45
+ - test/fixtures/respiratory_fixtures.yaml
43
46
  - test/nifti_builder_spec.rb
44
47
  - test/raw_image_dataset_test.rb
45
48
  - test/raw_image_file_test.rb
@@ -74,8 +77,8 @@ signing_key:
74
77
  specification_version: 3
75
78
  summary: MRI metadata
76
79
  test_files:
80
+ - test/nifti_builder_spec.rb
77
81
  - test/raw_image_dataset_test.rb
78
82
  - test/raw_image_file_test.rb
79
83
  - test/visit_duplication_test.rb
80
84
  - test/visit_test.rb
81
- - test/nifti_builder_spec.rb