metamri 0.1.5 → 0.1.6

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.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