brainmap-metamri 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/bin/import_study.rb CHANGED
@@ -27,7 +27,7 @@
27
27
  # Copyright (c) 2009 WADRC Imaging Core.
28
28
  #
29
29
 
30
- $:.unshift File.join(File.dirname(__FILE__),'..')
30
+ $:.unshift File.join(File.dirname(__FILE__),'..','lib')
31
31
 
32
32
  require 'visit_raw_data_directory'
33
33
  require 'pathname'
@@ -65,7 +65,7 @@ STUDIES = {
65
65
  :filter => /^esp3/,
66
66
  :codename => 'carlsson.esprit.visit2.9month'
67
67
  },
68
- :gallagher_pd => { :dir => '/Data/vtrak1/raw/gallagher_pd',
68
+ :gallagher_pd => { :dir => '/Data/vtrak1/raw/gallagher.pd',
69
69
  :logfile => 'gallagher.scan.log',
70
70
  :filter => /^pd..._/,
71
71
  :codename => 'gallagher.pd.visit1'
@@ -95,7 +95,7 @@ STUDIES = {
95
95
  :filter => /^tbi..._2/,
96
96
  :codename => 'johnson.tbi1000.visit2'
97
97
  },
98
- :tbi1000_3 => { :dir => '/Data/vtrak1/raw/tbi_aware',
98
+ :tbi1000_3 => { :dir => '/Data/vtrak1/raw/johnson.tbi.aware.visit3',
99
99
  :logfile => 'tbiaware.visit3.scan.log',
100
100
  :filter => /^tbi..._3$/,
101
101
  :codename => 'johnson.tbiaware.visit3'
@@ -141,8 +141,8 @@ def import_study(study, dbfile)
141
141
  rescue Exception => e
142
142
  puts "There was a problem scanning a dataset in #{visitdir}... skipping."
143
143
  puts "Exception message: #{e.message}"
144
- LOG.error "There was a problem scanning a dataset in #{visitdir}... skipping."
145
- LOG.error "Exception message: #{e.message}"
144
+ log.error "There was a problem scanning a dataset in #{visitdir}... skipping."
145
+ log.error "Exception message: #{e.message}"
146
146
  ensure
147
147
  v = nil
148
148
  end
data/bin/import_visit.rb CHANGED
@@ -29,12 +29,12 @@
29
29
  # Copyright (c) 2009 WADRC Imaging Core.
30
30
  #
31
31
 
32
- $:.unshift File.join(File.dirname(__FILE__),'..')
32
+ $:.unshift File.join(File.dirname(__FILE__),'..','lib')
33
33
 
34
34
  require 'visit_raw_data_directory'
35
35
  require 'pathname'
36
36
  require 'rdoc/usage'
37
-
37
+ require 'logger'
38
38
 
39
39
  # == Function
40
40
  # Imports imaging data collected during a single visit into the WADRC Data Tools web application database.
@@ -46,17 +46,17 @@ require 'rdoc/usage'
46
46
  # import_visit('/Data/vtrak1/raw/alz_2000/alz001','johnson.alz.visit1','/path/to/the/rails/db/production.sqlite3')
47
47
  #
48
48
  def import_visit(raw_directory, scan_procedure_codename, database)
49
+ log = Logger.new(File.basename(raw_directory))
49
50
  v = VisitRawDataDirectory.new(raw_directory, scan_procedure_codename)
50
51
  puts "+++ Importing #{v.visit_directory} as part of #{v.scan_procedure_name} +++"
51
52
  begin
52
53
  v.scan
53
- puts v
54
54
  v.db_insert!(database)
55
55
  rescue Exception => e
56
- puts "There was a problem scanning a dataset in #{visitdir}... skipping."
56
+ puts "There was a problem scanning a dataset in #{v.visit_directory}... skipping."
57
57
  puts "Exception message: #{e.message}"
58
- LOG.error "There was a problem scanning a dataset in #{visitdir}... skipping."
59
- LOG.error "Exception message: #{e.message}"
58
+ log.error "There was a problem scanning a dataset in #{v.visit_directory}... skipping."
59
+ log.error "Exception message: #{e.message}"
60
60
  ensure
61
61
  v = nil
62
62
  end
@@ -69,15 +69,18 @@ unzip a file to a temporary location, be sure to keep the same filename for the
69
69
  temporary file.
70
70
  =end
71
71
  def initialize(pathtofile)
72
-
73
72
  # raise an error if the file doesn't exist
74
73
  absfilepath = File.expand_path(pathtofile)
75
74
  raise(IOError, "File not found.") if not File.exists?(absfilepath)
76
75
  @filename = File.basename(absfilepath)
77
76
 
78
77
  # try to read the header, raise an ioerror if unsuccessful
79
- @hdr_data, @hdr_reader = read_header(absfilepath)
80
- raise(IOError, "Header not readable.") if @hdr_reader.nil?
78
+ begin
79
+ @hdr_data, @hdr_reader = read_header(absfilepath)
80
+ #puts "@hdr_data: #{@hdr_data}; @hdr_reader: #{@hdr_reader}"
81
+ rescue Exception => e
82
+ raise(IOError, "Header not readable. #{e}")
83
+ end
81
84
 
82
85
  # file type is based on file name but only if the header was read successfully
83
86
  @file_type = determine_file_type
@@ -86,8 +89,8 @@ temporary file.
86
89
  # are not found
87
90
  begin
88
91
  import_hdr
89
- rescue
90
- raise(IOError, "Header import failed.")
92
+ rescue Exception => e
93
+ raise(IOError, "Header import failed. #{e}")
91
94
  end
92
95
 
93
96
  # deallocate the header data to save memory space.
@@ -242,15 +245,19 @@ private
242
245
  Reads the file header using one of the available header reading utilities.
243
246
  Returns both the header data as a one big string, and the name of the utility
244
247
  used to read it.
248
+
249
+ Note: The rdgehdr is a binary file; the correct version for your architecture must be installed in the path.
245
250
  =end
246
251
  def read_header(absfilepath)
247
252
  header = `#{DICOM_HDR} #{absfilepath} 2> /dev/null`
253
+ #header = `#{DICOM_HDR} #{absfilepath}`
248
254
  if ( header.index("ERROR") == nil and
249
255
  header.chomp != "" and
250
256
  header.length > MIN_HDR_LENGTH )
251
257
  return [ header, DICOM_HDR ]
252
258
  end
253
259
  header = `#{RDGEHDR} #{absfilepath} 2> /dev/null`
260
+ #header = `#{RDGEHDR} #{absfilepath}`
254
261
  if ( header.chomp != "" and
255
262
  header.length > MIN_HDR_LENGTH )
256
263
  return [ header, RDGEHDR ]
@@ -277,7 +284,7 @@ Parses the header data and extracts a collection of instance variables. If
277
284
  @hdr_data and @hdr_reader are not already availables, this function does nothing.
278
285
  =end
279
286
  def import_hdr
280
- return if @hdr_data == nil
287
+ raise(IndexError, "No Header Data Available.") if @hdr_data == nil
281
288
  dicom_hdr_import if (@hdr_reader == "dicom_hdr")
282
289
  rdgehdr_import if (@hdr_reader == "rdgehdr")
283
290
  end
@@ -68,13 +68,22 @@ class VisitRawDataDirectory
68
68
  flash "Scanning visit raw data directory #{@visit_directory}"
69
69
  d = Pathname.new(@visit_directory)
70
70
  d.each_subdirectory do |dd|
71
- dd.each_pfile { |pf| @datasets << import_dataset(pf, dd) }
72
- dd.first_dicom { |fd| @datasets << import_dataset(fd, dd) }
71
+ begin
72
+ dd.each_pfile { |pf| @datasets << import_dataset(pf, dd) }
73
+ dd.first_dicom { |fd| @datasets << import_dataset(fd, dd) }
74
+ rescue Exception => e
75
+ raise(IndexError, "There was an error scaning dataset #{dd}: #{e}")
76
+ end
77
+ end
78
+
79
+ unless @datasets.size == 0
80
+ @timestamp = get_visit_timestamp
81
+ @rmr_number = get_rmr_number
82
+ @scanner_source = get_scanner_source
83
+ flash "Completed scanning #{@visit_directory}"
84
+ else
85
+ raise(IndexError, "No datasets could be scanned for directory #{@visit_directory}")
73
86
  end
74
- @timestamp = get_visit_timestamp
75
- @rmr_number = get_rmr_number
76
- @scanner_source = get_scanner_source
77
- flash "Completed scanning #{@visit_directory}"
78
87
  end
79
88
 
80
89
  # use this to initialize Visit objects in the rails app
@@ -219,12 +228,19 @@ class VisitRawDataDirectory
219
228
  enter_info_in_db, conference, compile_folder, dicom_dvd, user_id, path, scanner_source, created_at, updated_at)
220
229
  VALUES
221
230
  ('#{@timestamp.to_s}', '#{scan_procedure_id.to_s}', '', '', '#{@rmr_number}', 'no', '', 'no', 'no',
222
- 'no', 'no', 'no', 'no', 'no', 'no', 'no', 'no', 'no', 'no', 'no', NULL, '#{@visit_directory}', #{@scanner_source}, '#{DateTime.now}', '#{DateTime.now}')"
231
+ 'no', 'no', 'no', 'no', 'no', 'no', 'no', 'no', 'no', 'no', 'no', NULL, '#{@visit_directory}', '#{@scanner_source}', '#{DateTime.now}', '#{DateTime.now}')"
223
232
  end
224
233
 
225
234
  def import_dataset(rawfile, original_parent_directory)
226
235
  puts "Importing scan session: #{original_parent_directory.to_s} using raw data file: #{rawfile.basename}"
227
- return RawImageDataset.new(original_parent_directory.to_s, [RawImageFile.new(rawfile.to_s)])
236
+
237
+ begin
238
+ rawimagefile = RawImageFile.new(rawfile.to_s)
239
+ rescue Exception => e
240
+ raise(IOError, "Trouble reading raw image file #{rawfile}. #{e}")
241
+ end
242
+
243
+ return RawImageDataset.new(original_parent_directory.to_s, [rawimagefile])
228
244
  end
229
245
 
230
246
  def get_visit_timestamp
@@ -340,8 +356,8 @@ class Pathname
340
356
  lc = branch.local_copy
341
357
  begin
342
358
  yield lc
343
- rescue
344
- # Do nothing
359
+ rescue Exception => e
360
+ puts "#{e}"
345
361
  ensure
346
362
  lc.delete
347
363
  end
@@ -356,8 +372,8 @@ class Pathname
356
372
  lc = branch.local_copy
357
373
  begin
358
374
  yield lc
359
- rescue
360
- # Do nothing
375
+ rescue Exception => e
376
+ puts "#{e}"
361
377
  ensure
362
378
  lc.delete
363
379
  end
data/metamri.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{metamri}
5
- s.version = "0.1.1"
5
+ s.version = "0.1.2"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Kristopher J. Kosmatka"]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brainmap-metamri
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kristopher J. Kosmatka
@@ -49,7 +49,6 @@ files:
49
49
  - metamri.gemspec
50
50
  has_rdoc: true
51
51
  homepage: http://github.com/brainmap/metamri
52
- licenses:
53
52
  post_install_message:
54
53
  rdoc_options:
55
54
  - --line-numbers
@@ -75,7 +74,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
75
74
  requirements: []
76
75
 
77
76
  rubyforge_project: metamri
78
- rubygems_version: 1.3.5
77
+ rubygems_version: 1.2.0
79
78
  signing_key:
80
79
  specification_version: 2
81
80
  summary: Extraction of MRI metadata and insertion into compatible sqlite3 databases.