metamri 0.1.23 → 0.2.0

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.
@@ -25,17 +25,16 @@ end
25
25
 
26
26
 
27
27
 
28
- =begin rdoc
29
- Encapsulates a directory of data acquired during one participant visit. These
30
- are the raw data directories that are transfered directly from the scanners and
31
- archived in the raw data section of the vtrak filesystem. After initializing, the
32
- visit can be scanned to extract metadata for all of the images acquired during the
33
- visit. The scanning is done in a fairly naive manner: the visit directory is recursively
34
- walked and in each subdirectory any and all pfiles will be imported in addition to one single
35
- dicom if any exist. Thus, only a single dicom file among many in a scan session is used to
36
- retrieve information. checking the individual files for data integrity must be handled
37
- elsewhere if at all.
38
- =end
28
+ # Encapsulates a directory of data acquired during one participant visit. These
29
+ # are the raw data directories that are transfered directly from the scanners
30
+ # and archived in the raw data section of the vtrak filesystem. After
31
+ # initializing, the visit can be scanned to extract metadata for all of the
32
+ # images acquired during the visit. The scanning is done in a fairly naive
33
+ # manner: the visit directory is recursively walked and in each subdirectory any
34
+ # and all pfiles will be imported in addition to one single dicom if any exist.
35
+ # Thus, only a single dicom file among many in a scan session is used to
36
+ # retrieve information. checking the individual files for data integrity must be
37
+ # handled elsewhere if at all.
39
38
  class VisitRawDataDirectory
40
39
  # The absolute path of the visit directory, as a string.
41
40
  attr_reader :visit_directory
@@ -96,10 +95,10 @@ class VisitRawDataDirectory
96
95
  begin
97
96
  matches = options[:ignore_patterns].collect {|pat| dd.to_s =~ pat ? dd : nil }.compact
98
97
  next unless matches.empty?
99
- dd.each_pfile { |pf| @datasets << import_dataset(pf, dd) }
100
- dd.first_dicom { |fd| @datasets << import_dataset(fd, dd) }
101
- rescue Exception => e
102
- raise(IndexError, "There was an error scaning dataset #{dd}: #{e}")
98
+ dd.each_pfile { |pf| @datasets << import_dataset(pf, dd); (print "."; STDOUT.flush) if $LOG.level == Logger::INFO }
99
+ dd.first_dicom { |fd| @datasets << import_dataset(fd, dd); (print "."; STDOUT.flush) if $LOG.level == Logger::INFO }
100
+ rescue StandardError => e
101
+ raise(e, "There was an error scaning dataset #{dd}: #{e}")
103
102
  end
104
103
  end
105
104
 
@@ -220,7 +219,7 @@ Returns an array of the created nifti files.
220
219
  end
221
220
 
222
221
  # Reminder Line
223
- puts "(This would be much prettier if you installed hirb.)"
222
+ puts "(This would be much prettier if you hirb was installed (just type: gem install hirb)."
224
223
 
225
224
  return
226
225
  end
@@ -313,9 +312,8 @@ Returns an array of the created nifti files.
313
312
  "SELECT * FROM image_datasets WHERE rmr = '#{ds.rmr_number}' AND path = '#{ds.directory}' AND timestamp = '#{ds.timestamp}'"
314
313
  end
315
314
 
316
- =begin rdoc
317
- generates an sql insert statement to insert this visit with a given participant id
318
- =end
315
+
316
+ # generates an sql insert statement to insert this visit with a given participant id
319
317
  def sql_insert_visit(scan_procedure_id=0)
320
318
  "INSERT INTO visits
321
319
  (date, scan_procedure_id, scan_number, initials, rmr, radiology_outcome, notes, transfer_mri, transfer_pet,
@@ -324,19 +322,28 @@ generates an sql insert statement to insert this visit with a given participant
324
322
  ('#{@timestamp.to_s}', '#{scan_procedure_id.to_s}', '', '', '#{@rmr_number}', 'no', '', 'no', 'no',
325
323
  'no', 'no', 'no', NULL, '#{@visit_directory}', '#{@scanner_source}', '#{DateTime.now}', '#{DateTime.now}')"
326
324
  end
327
-
325
+
326
+ # Build a new RawImageDataset from a path to the rawfile and parent directory.
327
+ # == Args
328
+ # * rawfile: String. Path to the raw image file to scan. This should be an unzipped PFile or DICOM, ideally on a local disk for speed.
329
+ # * original_parent_directory: String or Pathname. Path of the original parent directory where the RawImageFile resides.
330
+ #
331
+ # Raises an IOError with description if the RawImageFile could not be initialized.
332
+ #
333
+ # Returns a RawImageDataset built from the directory and single rawfile.
328
334
  def import_dataset(rawfile, original_parent_directory)
329
335
  puts "Importing scan session: #{original_parent_directory.to_s} using raw data file: #{rawfile.basename}" if $LOG.level <= Logger::DEBUG
330
336
 
331
337
  begin
332
338
  rawimagefile = RawImageFile.new(rawfile.to_s)
333
- rescue Exception => e
334
- raise(IOError, "+++ Trouble reading raw image file #{rawfile}. #{e}")
339
+ # rescue Exception => e
340
+ # raise(e, "+++ Trouble reading raw image file #{rawfile}. #{e}")
335
341
  end
336
342
 
337
343
  return RawImageDataset.new(original_parent_directory.to_s, [rawimagefile])
338
344
  end
339
345
 
346
+
340
347
  def convert_dataset(rawfiles, original_parent_directory, nifti_output_directory)
341
348
  puts "Converting scan session: #{original_parent_directory.to_s} using raw data file: #{rawfiles.first.basename}"
342
349
  rawimagefiles = []
@@ -1,69 +1,75 @@
1
1
  # Generated by jeweler
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{metamri}
8
- s.version = "0.1.23"
8
+ s.version = "0.2.0"
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-11-16}
12
+ s.date = %q{2010-11-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", "import_respiratory_files.rb", "list_visit", "convert_visit.rb"]
15
+ s.executables = ["convert_visit.rb", "import_visit.rb", "import_respiratory_files.rb", "import_study.rb", "list_visit"]
16
16
  s.extra_rdoc_files = [
17
17
  "README.rdoc"
18
18
  ]
19
19
  s.files = [
20
- ".gitignore",
21
- "Manifest",
22
- "README.rdoc",
23
- "Rakefile",
24
- "VERSION",
25
- "bin/convert_visit.rb",
26
- "bin/import_respiratory_files.rb",
27
- "bin/import_study.rb",
28
- "bin/import_visit.rb",
29
- "bin/list_visit",
30
- "lib/metamri.rb",
31
- "lib/metamri/core_additions.rb",
32
- "lib/metamri/mysql_tools.rb",
33
- "lib/metamri/nifti_builder.rb",
34
- "lib/metamri/raw_image_dataset.rb",
35
- "lib/metamri/raw_image_dataset_resource.rb",
36
- "lib/metamri/raw_image_dataset_thumbnail.rb",
37
- "lib/metamri/raw_image_file.rb",
38
- "lib/metamri/series_description_parameters.rb",
39
- "lib/metamri/visit_raw_data_directory.rb",
40
- "lib/metamri/visit_raw_data_directory_resource.rb",
41
- "metamri.gemspec",
42
- "test/fixtures/respiratory_fixtures.yaml",
43
- "test/fixtures/s03_bravo.0156",
44
- "test/fixtures/thumbnail.png",
45
- "test/fixtures/thumbnail_slicer.png",
46
- "test/helper_spec.rb",
47
- "test/nifti_builder_spec.rb",
48
- "test/raw_image_dataset_test.rb",
49
- "test/raw_image_dataset_thumbnail_spec.rb",
50
- "test/raw_image_file_test.rb",
51
- "test/visit_duplication_test.rb",
52
- "test/visit_test.rb"
20
+ "Manifest",
21
+ "README.rdoc",
22
+ "Rakefile",
23
+ "VERSION",
24
+ "bin/convert_visit.rb",
25
+ "bin/import_respiratory_files.rb",
26
+ "bin/import_study.rb",
27
+ "bin/import_visit.rb",
28
+ "bin/list_visit",
29
+ "lib/metamri.rb",
30
+ "lib/metamri/core_additions.rb",
31
+ "lib/metamri/image_dataset_quality_check_resource.rb",
32
+ "lib/metamri/mysql_tools.rb",
33
+ "lib/metamri/nifti_builder.rb",
34
+ "lib/metamri/raw_image_dataset.rb",
35
+ "lib/metamri/raw_image_dataset_resource.rb",
36
+ "lib/metamri/raw_image_dataset_thumbnail.rb",
37
+ "lib/metamri/raw_image_file.rb",
38
+ "lib/metamri/series_description_parameters.rb",
39
+ "lib/metamri/visit_raw_data_directory.rb",
40
+ "lib/metamri/visit_raw_data_directory_resource.rb",
41
+ "metamri.gemspec",
42
+ "spec/helper_spec.rb",
43
+ "spec/unit/nifti_builder_spec.rb",
44
+ "spec/unit/raw_image_dataset_spec.rb",
45
+ "spec/unit/raw_image_dataset_thumbnail_spec.rb",
46
+ "spec/unit/raw_image_file_spec.rb",
47
+ "test/fixtures/respiratory_fixtures.yaml",
48
+ "test/fixtures/s03_bravo.0156",
49
+ "test/fixtures/s03_bravo.0156.yml",
50
+ "test/fixtures/thumbnail.png",
51
+ "test/fixtures/thumbnail_slicer.png",
52
+ "test/raw_image_dataset_test.rb",
53
+ "test/raw_image_file_test.rb",
54
+ "test/test_helper.rb",
55
+ "test/visit_duplication_test.rb",
56
+ "test/visit_test.rb"
53
57
  ]
54
58
  s.homepage = %q{http://github.com/brainmap/metamri}
55
- s.rdoc_options = ["--charset=UTF-8"]
56
59
  s.require_paths = ["lib"]
57
60
  s.rubygems_version = %q{1.3.6}
58
61
  s.summary = %q{MRI metadata}
59
62
  s.test_files = [
60
- "test/nifti_builder_spec.rb",
61
- "test/raw_image_dataset_test.rb",
62
- "test/raw_image_file_test.rb",
63
- "test/visit_duplication_test.rb",
64
- "test/visit_test.rb",
65
- "test/raw_image_dataset_thumbnail_spec.rb",
66
- "test/helper_spec.rb"
63
+ "spec/helper_spec.rb",
64
+ "spec/unit/nifti_builder_spec.rb",
65
+ "spec/unit/raw_image_dataset_spec.rb",
66
+ "spec/unit/raw_image_dataset_thumbnail_spec.rb",
67
+ "spec/unit/raw_image_file_spec.rb",
68
+ "test/raw_image_dataset_test.rb",
69
+ "test/raw_image_file_test.rb",
70
+ "test/test_helper.rb",
71
+ "test/visit_duplication_test.rb",
72
+ "test/visit_test.rb"
67
73
  ]
68
74
 
69
75
  if s.respond_to? :specification_version then
@@ -10,9 +10,7 @@ require 'tmpdir'
10
10
  require 'fileutils'
11
11
  require 'yaml'
12
12
  require 'pp'
13
- require 'rubygems'
14
13
 
15
14
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
16
15
 
17
16
  $MRI_DATA = ENV['MRI_DATA'] || '/Data/vtrak1/raw/test/fixtures/metamri'
18
-
@@ -0,0 +1,35 @@
1
+ require 'helper_spec'
2
+ require 'logger'
3
+ require 'metamri/raw_image_dataset'
4
+ require 'metamri/raw_image_file'
5
+
6
+ describe RawImageDataset, "for a single valid DICOM file" do
7
+ before(:each) do
8
+ # Since a single, anonymized dicom is sufficiently small, provide it in fixtures for testing.
9
+ @valid_dicom_basename = 's03_bravo.0156'
10
+ @valid_dicom = File.join(File.dirname(__FILE__), '..', 'fixtures', @valid_dicom_basename)
11
+ @valid_raw_image_file = RawImageFile.new(@valid_dicom)
12
+ end
13
+
14
+ it "should have scan series metadata" do
15
+ dataset_dir = File.expand_path File.dirname(@valid_dicom)
16
+ ds = RawImageDataset.new(dataset_dir, @valid_raw_image_file)
17
+
18
+ ds.dataset_key.should == "ID::2010-11-10T00:00:00+00:00"
19
+ ds.directory.should == dataset_dir
20
+ ds.raw_image_files.first.should == @valid_raw_image_file
21
+ ds.rmr_number.should == "ID"
22
+ ds.scanned_file.should == @valid_dicom_basename
23
+ ds.scanner_source.should == "Station"
24
+ ds.series_description.should == "Ax FSPGR BRAVO T1"
25
+ ds.study_id.should == "1405"
26
+ ds.timestamp.should == DateTime.parse("Wed, 10 Nov 2010 00:00:00 +0000")
27
+ ds.study_description.should == "RMRMABRAVOTEST"
28
+ ds.dicom?.should be true
29
+ ds.protocol_name.should == "MERIT220 + TAMI/METS 101"
30
+ ds.operator_name.should == "Operator"
31
+ ds.patient_name.should == "Patient"
32
+ ds.dicom_series_uid.should == "1.2.840.113619.2.260.6945.1176948.30017.1288984188.384"
33
+ ds.dicom_study_uid.should == "1.2.840.113619.6.260.4.1294724594.737.1289407877.724"
34
+ end
35
+ end
@@ -1,13 +1,15 @@
1
- $:.unshift File.join(File.dirname(__FILE__),'..','lib')
1
+ $:.unshift File.join(File.dirname(__FILE__),'..','..','lib')
2
+ $:.unshift File.join(File.dirname(__FILE__))
2
3
 
3
4
  require 'spec'
4
- require 'helper_spec'
5
5
  require 'escoffier'
6
6
  require 'metamri/core_additions'
7
7
  require 'metamri/raw_image_dataset'
8
8
  require 'metamri/raw_image_file'
9
9
  require 'metamri/raw_image_dataset_thumbnail'
10
10
 
11
+ require 'helper_spec'
12
+
11
13
  describe "Create a thumbnail png for display." do
12
14
  before(:all) do
13
15
  # # Initialize a local scratch directory to hold fixtures for testing if it doesn't already exist.
@@ -20,15 +22,16 @@ describe "Create a thumbnail png for display." do
20
22
  # `find #{VISIT_FIXTURE_UNZIPPED} -name '*.bz2' -exec bunzip2 {} \\;`
21
23
  # end
22
24
  @fixture_path = File.join($MRI_DATA, 'mrt00000_000_010101', 'dicoms', 's10_cubet2')
23
- end
24
-
25
- before(:each) do
26
25
  @tmpdir = Dir.mktmpdir
27
26
  Pathname.new(@fixture_path).prep_mise_to(@tmpdir)
28
27
  @dataset_wd = File.join(@tmpdir, File.basename(@fixture_path))
29
- @ds = RawImageDataset.new(@dataset_wd, RawImageFile.new(File.join(@dataset_wd, 's10_cubet2.0001')))
30
- @valid_thumbnail = File.join('fixtures', 'thumbnail.png')
31
- @valid_thumbnail_slicer = File.join('fixtures', 'thumbnail_slicer.png')
28
+ @dataset_dicom = Dir.glob(File.join(@dataset_wd, '*')).first
29
+ @ds = RawImageDataset.new(@dataset_wd, RawImageFile.new(@dataset_dicom))
30
+ @valid_thumbnail = File.join(File.dirname(__FILE__), '..', 'fixtures', 'thumbnail.png')
31
+ @valid_thumbnail_slicer = File.join(File.dirname(__FILE__), '..', 'fixtures', 'thumbnail_slicer.png')
32
+ end
33
+
34
+ before(:each) do
32
35
  @test_niftis = []
33
36
  end
34
37
 
@@ -85,6 +88,12 @@ describe "Create a thumbnail png for display." do
85
88
  lambda { t.create_thumbnail }.should raise_error(ScriptError, /Error creating thumbnail/ )
86
89
  end
87
90
 
91
+ it "should raise an ArgumentError if an invalid processor is given." do
92
+ t = RawImageDatasetThumbnail.new(@ds)
93
+
94
+ lambda { t.create_thumbnail(nil, :processor => :invalid_processor ) }.should raise_error(ArgumentError, /Invalid :processor option/ )
95
+ end
96
+
88
97
  it "should create a thumbnail in a tmpdir without a specified path using FSL Slicer." do
89
98
  t = RawImageDatasetThumbnail.new(@ds)
90
99
  t.create_thumbnail(nil, {:processor => :slicer})
@@ -95,10 +104,7 @@ describe "Create a thumbnail png for display." do
95
104
  end
96
105
 
97
106
  after(:each) do
98
- # @test_niftis.flatten.each { |nifti| File.delete(nifti) } unless @test_niftis.empty?
99
- # [@output_directories, @tmpdir, '/tmp'].flatten.each do |temp_dir|
100
- # Dir.foreach(temp_dir) {|f| File.delete(File.join(temp_dir, f)) if File.extname(f) == '.nii'}
101
- # end
107
+ File.delete('test.png') if File.exist? 'test.png'
102
108
  end
103
109
 
104
110
  end
@@ -0,0 +1,45 @@
1
+ require 'helper_spec'
2
+ require 'metamri/core_additions'
3
+ require 'metamri/raw_image_file'
4
+
5
+
6
+ describe RawImageFile, "reads a dicom header and extracts metadata" do
7
+ before(:each) do
8
+ # Since a single, anonymized dicom is sufficiently small, provide it in fixtures for testing.
9
+ @valid_dicom = File.join(File.dirname(__FILE__), '..', 'fixtures', 's03_bravo.0156')
10
+ @valid_serial_dicom_taghash = File.join(File.dirname(__FILE__), '..', 'fixtures', 's03_bravo.0156.yml')
11
+ end
12
+ context "using RubyDicom" do
13
+ it "should successfully set filename" do
14
+ image = RawImageFile.new(@valid_dicom)
15
+ image.filename.should == File.basename(@valid_dicom)
16
+ end
17
+
18
+ it "should raise an error if the file cannot be found" do
19
+ lambda { RawImageFile.new('bad_path_to.dcm') }.should raise_error(IOError, /File not found/ )
20
+ end
21
+
22
+ it "should set valid instance variables" do
23
+ valid_dicom_taghash = YAML.load_file(@valid_serial_dicom_taghash)
24
+
25
+ image = RawImageFile.new(@valid_dicom)
26
+ image.file_type.should == "dicom"
27
+ image.gender.should == "N"
28
+ [RawImageFile::DICOM_HDR, RawImageFile::RDGEHDR, RawImageFile::RUBYDICOM_HDR].include?(image.hdr_reader).should be true
29
+ image.acquisition_matrix_x.should == 256
30
+ image.acquisition_matrix_y.should == 256
31
+ image.num_slices.should == "156"
32
+ image.reconstruction_diameter.should == "256"
33
+ image.rep_time.should == "8.132"
34
+ image.rmr_number.should == "ID"
35
+ image.series_description.should == "Ax FSPGR BRAVO T1"
36
+ image.slice_spacing.should == "1"
37
+ image.slice_thickness.should == "1"
38
+ image.source.should == "Station"
39
+ # Don't compare floats due to rounding errors, but compare all the other tags in dicom_taghash
40
+ image.dicom_taghash.reject{|k,v| v[:value].kind_of? Float }.should == valid_dicom_taghash.reject{|k,v| v[:value].kind_of? Float }
41
+ image.dicom_study_uid.should == "1.2.840.113619.6.260.4.1294724594.737.1289407877.724"
42
+ image.dicom_series_uid.should == "1.2.840.113619.2.260.6945.1176948.30017.1288984188.384"
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,937 @@
1
+ ---
2
+ 0043,102E:
3
+ :value:
4
+ :name: Private
5
+ "0043,1010":
6
+ :value: 0
7
+ :name: Private
8
+ 0020,000E:
9
+ :value: 1.2.840.113619.2.260.6945.1176948.30017.1288984188.384
10
+ :name: Series Instance UID
11
+ 0018,1315:
12
+ :value: N
13
+ :name: Variable Flip Angle Flag
14
+ 0018,0094:
15
+ :value: "100"
16
+ :name: Percent Phase Field of View
17
+ 0019,1084:
18
+ :value: "0.433979"
19
+ :name: Private
20
+ 0018,1316:
21
+ :value: "0.21699"
22
+ :name: SAR
23
+ 0009,1027:
24
+ :value: 1289386829
25
+ :name: Private
26
+ 0043,102F:
27
+ :value: 0
28
+ :name: Private
29
+ 0028,1050:
30
+ :value: "2446"
31
+ :name: Window Center
32
+ 0018,0095:
33
+ :value: "244.141"
34
+ :name: Pixel Bandwidth
35
+ 0008,1030:
36
+ :value: RMRMABRAVOTEST
37
+ :name: Study Description
38
+ 0028,1051:
39
+ :value: "4893"
40
+ :name: Window Width
41
+ 0043,108A:
42
+ :value: COL
43
+ :name: Private
44
+ 0019,1087:
45
+ :value: "0.000000"
46
+ :name: Private
47
+ 0009,10E9:
48
+ :value: 1289386828
49
+ :name: Private
50
+ 0008,1140:
51
+ :value:
52
+ :name: Referenced Image Sequence
53
+ 0019,1088:
54
+ :value: 0
55
+ :name: Private
56
+ 0019,10BA:
57
+ :value: "0.000000"
58
+ :name: Private
59
+ 0019,10BB:
60
+ :value: "0.000000"
61
+ :name: Private
62
+ 0019,10BC:
63
+ :value: "0.000000"
64
+ :name: Private
65
+ 0021,104F:
66
+ :value: 156
67
+ :name: Private
68
+ 7FE0,0010:
69
+ :value:
70
+ :name: Pixel Data
71
+ 0029,1026:
72
+ :value: 2
73
+ :name: Private
74
+ "0020,0052":
75
+ :value: 1.2.840.113619.2.260.6945.1176948.30017.1288984188.382
76
+ :name: Frame of Reference UID
77
+ 0019,10A0:
78
+ :value: 0
79
+ :name: Private
80
+ 0019,10BD:
81
+ :value: "0.000000"
82
+ :name: Private
83
+ 0008,1090:
84
+ :value: DISCOVERY MR750
85
+ :name: Manufacturer's Model Name
86
+ 0019,10A1:
87
+ :value: 0
88
+ :name: Private
89
+ 0019,10BE:
90
+ :value: "0.000000"
91
+ :name: Private
92
+ 0018,0020:
93
+ :value: GR
94
+ :name: Scanning Sequence
95
+ 0019,10A2:
96
+ :value: 5789
97
+ :name: Private
98
+ 0018,1000:
99
+ :value: 0000000608WAISMR
100
+ :name: Device Serial Number
101
+ "0010,0010":
102
+ :value: Patient
103
+ :name: Patient's Name
104
+ 0018,0021:
105
+ :value: SS\SK
106
+ :name: Sequence Variant
107
+ 0019,105A:
108
+ :value: 246280416.0
109
+ :name: Private
110
+ 0019,10A3:
111
+ :value: 0
112
+ :name: Private
113
+ "0002,0000":
114
+ :value: 208
115
+ :name: File Meta Information Group Length
116
+ "0021,1035":
117
+ :value: 1
118
+ :name: Private
119
+ 0018,0022:
120
+ :value: FAST_GEMS\EDR_GEMS\ACC_GEMS
121
+ :name: Scan Options
122
+ 0019,1011:
123
+ :value: 0
124
+ :name: Private
125
+ 0019,10A4:
126
+ :value: 0
127
+ :name: Private
128
+ "0002,0001":
129
+ :value:
130
+ :name: File Meta Information Version
131
+ "0021,1036":
132
+ :value: 5
133
+ :name: Private
134
+ 0018,0023:
135
+ :value: 3D
136
+ :name: MR Acquisition Type
137
+ 0019,1012:
138
+ :value: 74
139
+ :name: Private
140
+ "0040,0242":
141
+ :value: MR01OC1
142
+ :name: Performed Station Name
143
+ "0002,0002":
144
+ :value: 1.2.840.10008.5.1.4.1.1.4
145
+ :name: Media Storage SOP Class UID
146
+ "0021,1037":
147
+ :value: 16
148
+ :name: Private
149
+ 0018,0050:
150
+ :value: "1"
151
+ :name: Slice Thickness
152
+ "0040,0243":
153
+ :value: MR01
154
+ :name: Performed Location
155
+ "0002,0003":
156
+ :value: 1.2.840.113619.2.260.6945.1176948.29385.1288985252.77
157
+ :name: Media Storage SOP Instance UID
158
+ 0019,10D2:
159
+ :value: 0
160
+ :name: Private
161
+ 0008,0030:
162
+ :value: "000000.00"
163
+ :name: Study Time
164
+ 0018,1030:
165
+ :value: MERIT220 + TAMI/METS 101
166
+ :name: Protocol Name
167
+ "0010,1010":
168
+ :value: 028Y
169
+ :name: Patient's Age
170
+ "0010,0040":
171
+ :value: N
172
+ :name: Patient's Sex
173
+ 0018,0025:
174
+ :value: N
175
+ :name: Angio Flag
176
+ "0020,1040":
177
+ :value:
178
+ :name: Position Reference Indicator
179
+ 0019,108A:
180
+ :value: 10
181
+ :name: Private
182
+ 0028,0002:
183
+ :value: 1
184
+ :name: Samples per Pixel
185
+ 0019,10D3:
186
+ :value:
187
+ :name: Private
188
+ 0008,0005:
189
+ :value: ISO_IR 100
190
+ :name: Specific Character Set
191
+ 0008,0031:
192
+ :value: "110028"
193
+ :name: Series Time
194
+ "0020,1041":
195
+ :value: "94.84349823"
196
+ :name: Slice Location
197
+ 0019,108B:
198
+ :value: 29
199
+ :name: Private
200
+ 0019,10A7:
201
+ :value: "0.000000"
202
+ :name: Private
203
+ 0008,0032:
204
+ :value: "110029"
205
+ :name: Acquisition Time
206
+ "0025,1010":
207
+ :value: 0
208
+ :name: Private
209
+ 0018,0080:
210
+ :value: "8.132"
211
+ :name: Repetition Time
212
+ 0019,10A8:
213
+ :value: "0.000000"
214
+ :name: Private
215
+ 0028,0030:
216
+ :value: 1\1
217
+ :name: Pixel Spacing
218
+ 0028,0004:
219
+ :value: MONOCHROME2
220
+ :name: Photometric Interpretation
221
+ 0008,0033:
222
+ :value: "000000.00"
223
+ :name: Content Time
224
+ 0008,0060:
225
+ :value: MR
226
+ :name: Modality
227
+ "0025,1011":
228
+ :value: 1
229
+ :name: Private
230
+ 0019,1017:
231
+ :value: 2
232
+ :name: Private
233
+ 0018,0081:
234
+ :value: "3.18"
235
+ :name: Echo Time
236
+ 0019,108D:
237
+ :value: "0"
238
+ :name: Private
239
+ 0019,10A9:
240
+ :value: "0.000000"
241
+ :name: Private
242
+ 0019,10D5:
243
+ :value: 0
244
+ :name: Private
245
+ 0043,101C:
246
+ :value: 0
247
+ :name: Private
248
+ 0019,1018:
249
+ :value: I
250
+ :name: Private
251
+ 0018,0082:
252
+ :value: "450"
253
+ :name: Inversion Time
254
+ 0008,0008:
255
+ :value: ORIGINAL\PRIMARY\OTHER
256
+ :name: Image Type
257
+ 0043,101D:
258
+ :value: 0
259
+ :name: Private
260
+ 0019,1019:
261
+ :value: "-60.1565"
262
+ :name: Private
263
+ 0019,108F:
264
+ :value: 1
265
+ :name: Private
266
+ 0019,10D7:
267
+ :value: 0
268
+ :name: Private
269
+ "0025,1014":
270
+ :value: 0
271
+ :name: Private
272
+ 0018,0083:
273
+ :value: "1"
274
+ :name: Number of Averages
275
+ 0018,1250:
276
+ :value: 8HRBRAIN
277
+ :name: Receive Coil Name
278
+ 0019,10D8:
279
+ :value: 0
280
+ :name: Private
281
+ "0043,1001":
282
+ :value: 4
283
+ :name: Private
284
+ 0008,0090:
285
+ :value: Physician
286
+ :name: Referring Physician's Name
287
+ 0018,1090:
288
+ :value: "0"
289
+ :name: Cardiac Number of Images
290
+ 0018,0084:
291
+ :value: "127.755207"
292
+ :name: Imaging Frequency
293
+ 0019,10D9:
294
+ :value: "0.000000"
295
+ :name: Private
296
+ "0043,1002":
297
+ :value: 3
298
+ :name: Private
299
+ 0018,0085:
300
+ :value: 1H
301
+ :name: Imaged Nucleus
302
+ 0008,103E:
303
+ :value: Ax FSPGR BRAVO T1
304
+ :name: Series Description
305
+ "0043,1003":
306
+ :value: -5
307
+ :name: Private
308
+ "0025,1017":
309
+ :value: 0
310
+ :name: Private
311
+ 0019,0010:
312
+ :value: GEMS_ACQU_01
313
+ :name: Private
314
+ 0018,0086:
315
+ :value: "1"
316
+ :name: Echo Number(s)
317
+ "0020,0010":
318
+ :value: "1405"
319
+ :name: Study ID
320
+ "0043,1030":
321
+ :value: 0
322
+ :name: Private
323
+ "0043,1004":
324
+ :value: -25
325
+ :name: Private
326
+ 0025,1018:
327
+ :value: 0
328
+ :name: Private
329
+ 0018,0087:
330
+ :value: "3"
331
+ :name: Magnetic Field Strength
332
+ "0020,0011":
333
+ :value: "3"
334
+ :name: Series Number
335
+ "0027,1010":
336
+ :value: 0
337
+ :name: Private
338
+ 0018,1094:
339
+ :value: "0"
340
+ :name: Trigger Window
341
+ 0025,1019:
342
+ :value: 156
343
+ :name: Private
344
+ 0018,0088:
345
+ :value: "1"
346
+ :name: Spacing Between Slices
347
+ "0020,0012":
348
+ :value: "1"
349
+ :name: Acquisition Number
350
+ "0043,1032":
351
+ :value: 2
352
+ :name: Private
353
+ "0043,1006":
354
+ :value: 0
355
+ :name: Private
356
+ "0020,0013":
357
+ :value: "156"
358
+ :name: Instance Number
359
+ 0019,10AA:
360
+ :value: "0.000000"
361
+ :name: Private
362
+ 0043,107D:
363
+ :value: 0
364
+ :name: Private
365
+ "0043,1033":
366
+ :value: 0.0
367
+ :name: Private
368
+ "0043,1007":
369
+ :value: 0
370
+ :name: Private
371
+ 0009,0010:
372
+ :value: GEMS_IDEN_01
373
+ :name: Private
374
+ 0019,101A:
375
+ :value: S
376
+ :name: Private
377
+ 0019,10AB:
378
+ :value: "0.000000"
379
+ :name: Private
380
+ "0043,1060":
381
+ :value: 0\0\0\0\0\0\0\64
382
+ :name: Private
383
+ "0043,1034":
384
+ :value: "0"
385
+ :name: Private
386
+ 0043,1008:
387
+ :value: 0
388
+ :name: Private
389
+ 0029,1015:
390
+ :value: 0
391
+ :name: Private
392
+ 0019,101B:
393
+ :value: "94.8435"
394
+ :name: Private
395
+ 0019,10AC:
396
+ :value: "0.000000"
397
+ :name: Private
398
+ "0043,1061":
399
+ :value: 1.2.840.113619.6.260.4.1294724594.737.1289407877.724
400
+ :name: Private
401
+ "0043,1035":
402
+ :value: 0
403
+ :name: Private
404
+ 0043,1009:
405
+ :value: 0
406
+ :name: Private
407
+ 0029,1016:
408
+ :value: 0
409
+ :name: Private
410
+ "0027,1040":
411
+ :value: S
412
+ :name: Private
413
+ "0025,0010":
414
+ :value: GEMS_SERS_01
415
+ :name: Private
416
+ 0019,10AD:
417
+ :value: "0.000000"
418
+ :name: Private
419
+ "0043,1062":
420
+ :value: "1405"
421
+ :name: Private
422
+ "0043,1036":
423
+ :value: 0
424
+ :name: Private
425
+ 0029,1017:
426
+ :value: 0
427
+ :name: Private
428
+ 0029,0010:
429
+ :value: GEMS_IMPS_01
430
+ :name: Private
431
+ "0027,1041":
432
+ :value: 94.8434982299805
433
+ :name: Private
434
+ 0019,10AE:
435
+ :value: "1.000000"
436
+ :name: Private
437
+ "0043,1037":
438
+ :value: 0
439
+ :name: Private
440
+ 0029,1018:
441
+ :value: 0
442
+ :name: Private
443
+ 0019,101E:
444
+ :value: "256.000000"
445
+ :name: Private
446
+ 0019,10AF:
447
+ :value: "1.000000"
448
+ :name: Private
449
+ "0021,1050":
450
+ :value: 0
451
+ :name: Private
452
+ 0043,1090:
453
+ :value: WHOLE_BODY_6_MIN\LOCAL_PEAK_6_MIN\PARTIAL_BODY_6MIN
454
+ :name: Private
455
+ 0043,1038:
456
+ :value: 0.0\0.0\0.0\0.0\0.0\0.0\0.0\0.0\0.0\0.0\0.0\0.0\0.0\0.0\0.0\0.0\0.0\0.0\0.0\0.0\0.0\0.0\0.0\0.0
457
+ :name: Private
458
+ "0023,1070":
459
+ :value: 0.0
460
+ :name: Private
461
+ "0021,1051":
462
+ :value: "0.000000"
463
+ :name: Private
464
+ 0043,1091:
465
+ :value: 0.217\0.433979\0.21699
466
+ :name: Private
467
+ 0043,1039:
468
+ :value: 0\1073741824\0\0
469
+ :name: Private
470
+ 0025,101A:
471
+ :value: MR01OC1
472
+ :name: Private
473
+ "0020,1002":
474
+ :value: "156"
475
+ :name: Images in Acquisition
476
+ 0019,10C0:
477
+ :value: 0
478
+ :name: Private
479
+ "0021,1052":
480
+ :value: "0.000000"
481
+ :name: Private
482
+ 0025,101B:
483
+ :value:
484
+ :name: Private
485
+ "0021,1053":
486
+ :value: "0.000000"
487
+ :name: Private
488
+ 0018,1100:
489
+ :value: "256"
490
+ :name: Reconstruction Diameter
491
+ 0019,10C2:
492
+ :value: 9990
493
+ :name: Private
494
+ 0008,0020:
495
+ :value: "20000101"
496
+ :name: Study Date
497
+ 0019,10DF:
498
+ :value: "100.000000"
499
+ :name: Private
500
+ 0018,1020:
501
+ :value: 21\LX\MR Software release:20.1_IB2_1020.a
502
+ :name: Software Version(s)
503
+ "0010,0030":
504
+ :value: "20000101"
505
+ :name: Patient's Birth Date
506
+ 0019,10C3:
507
+ :value: 9990
508
+ :name: Private
509
+ "0023,1074":
510
+ :value: 0
511
+ :name: Private
512
+ 0008,0021:
513
+ :value: "20101110"
514
+ :name: Series Date
515
+ 0021,1081:
516
+ :value: "0"
517
+ :name: Private
518
+ 0043,1095:
519
+ :value: TG/s1,CF/s2,AS/s2
520
+ :name: Private
521
+ 0043,100A:
522
+ :value: 1
523
+ :name: Private
524
+ 0028,0100:
525
+ :value: 16
526
+ :name: Bits Allocated
527
+ 0019,10C4:
528
+ :value: 9990
529
+ :name: Private
530
+ 0008,0022:
531
+ :value: "20101110"
532
+ :name: Acquisition Date
533
+ "0021,1056":
534
+ :value: 1
535
+ :name: Private
536
+ 0021,1082:
537
+ :value: "0"
538
+ :name: Private
539
+ 0009,1002:
540
+ :value: MR01
541
+ :name: Private
542
+ 0020,9056:
543
+ :value: "1"
544
+ :name: Stack ID
545
+ 0043,1096:
546
+ :value: RESEARCH
547
+ :name: Private
548
+ 0043,100B:
549
+ :value: "0.000000"
550
+ :name: Private
551
+ 0028,0101:
552
+ :value: 16
553
+ :name: Bits Stored
554
+ "0027,0010":
555
+ :value: GEMS_IMAG_01
556
+ :name: Private
557
+ 0019,107D:
558
+ :value: "0"
559
+ :name: Private
560
+ 0019,10C5:
561
+ :value: 9990
562
+ :name: Private
563
+ 0008,0023:
564
+ :value: "20000101"
565
+ :name: Content Date
566
+ "0021,1057":
567
+ :value: 160
568
+ :name: Private
569
+ 0008,0050:
570
+ :value:
571
+ :name: Accession Number
572
+ 0021,1083:
573
+ :value: "0"
574
+ :name: Private
575
+ 0009,1030:
576
+ :value: 608WAISMR
577
+ :name: Private
578
+ 0020,9057:
579
+ :value: 158
580
+ :name: In-Stack Position Number
581
+ 0043,1097:
582
+ :value: \\1.5 0.2 0.2 2.0 64 0.4 1.05\1.5 0.2 0.2 2.0 64 0.4 1.05\1.5 0.2 0.2 2.0 64 0.4 1.05\100\0\0\rev=1;a=75;b=2;c=32;d=8;e=3;f=2;g=1;h=0
583
+ :name: Private
584
+ 0043,100C:
585
+ :value: "100.000000"
586
+ :name: Private
587
+ 0028,0102:
588
+ :value: 15
589
+ :name: High Bit
590
+ 0019,107E:
591
+ :value: 1
592
+ :name: Private
593
+ 0019,10C6:
594
+ :value: 9990
595
+ :name: Private
596
+ 0019,10F2:
597
+ :value: 0
598
+ :name: Private
599
+ 0021,1058:
600
+ :value: 0
601
+ :name: Private
602
+ 0021,1084:
603
+ :value: "0"
604
+ :name: Private
605
+ 0009,1004:
606
+ :value: SIGNA
607
+ :name: Private
608
+ "0010,1030":
609
+ :value: "79.83"
610
+ :name: Patient's Weight
611
+ 0028,0103:
612
+ :value: 1
613
+ :name: Pixel Representation
614
+ 0019,107F:
615
+ :value: "0.000000"
616
+ :name: Private
617
+ 0019,10C7:
618
+ :value: 9990
619
+ :name: Private
620
+ 0021,1059:
621
+ :value: 0
622
+ :name: Private
623
+ 0009,1031:
624
+ :value: "9999"
625
+ :name: Private
626
+ 0043,100D:
627
+ :value: "97.421402"
628
+ :name: Private
629
+ 0019,10C8:
630
+ :value: 0
631
+ :name: Private
632
+ 0043,100E:
633
+ :value: "0.000000"
634
+ :name: Private
635
+ 0019,10C9:
636
+ :value: 0
637
+ :name: Private
638
+ 0008,0080:
639
+ :value: Institution
640
+ :name: Institution Name
641
+ 0019,1090:
642
+ :value: 0
643
+ :name: Private
644
+ 0028,0106:
645
+ :value: 0
646
+ :name: Smallest Image Pixel Value
647
+ 0008,1010:
648
+ :value: Station
649
+ :name: Station Name
650
+ "0025,1006":
651
+ :value: 74
652
+ :name: Private
653
+ 0019,1091:
654
+ :value: "0.000000"
655
+ :name: Private
656
+ 0028,0107:
657
+ :value: 4893
658
+ :name: Largest Image Pixel Value
659
+ "0025,1007":
660
+ :value: 156
661
+ :name: Private
662
+ 0019,1092:
663
+ :value: 0
664
+ :name: Private
665
+ 0019,1093:
666
+ :value: "1277552070"
667
+ :name: Private
668
+ 0019,10F9:
669
+ :value: "128"
670
+ :name: Private
671
+ 0019,1094:
672
+ :value: 128
673
+ :name: Private
674
+ 0019,1095:
675
+ :value: 10
676
+ :name: Private
677
+ 0021,105A:
678
+ :value: 0
679
+ :name: Private
680
+ 0043,109A:
681
+ :value: "1"
682
+ :name: Private
683
+ 0021,105B:
684
+ :value: "0.000000"
685
+ :name: Private
686
+ 0019,1096:
687
+ :value: 29
688
+ :name: Private
689
+ 0043,106F:
690
+ :value: 0\0\0\0
691
+ :name: Private
692
+ "0027,1030":
693
+ :value:
694
+ :name: Private
695
+ 0008,1070:
696
+ :value: Operator
697
+ :name: Operators' Name
698
+ 0021,105C:
699
+ :value: "0.000000"
700
+ :name: Private
701
+ "0020,0032":
702
+ :value: -127.5\-159.375\94.8435
703
+ :name: Image Position (Patient)
704
+ 0018,5100:
705
+ :value: HFS
706
+ :name: Patient Position
707
+ 0019,1097:
708
+ :value: 16
709
+ :name: Private
710
+ "0027,1031":
711
+ :value: 9
712
+ :name: Private
713
+ 0021,105D:
714
+ :value: "0.000000"
715
+ :name: Private
716
+ 0018,1088:
717
+ :value: "0"
718
+ :name: Heart Rate
719
+ 0019,10CA:
720
+ :value: 0
721
+ :name: Private
722
+ 0029,1034:
723
+ :value: 16384
724
+ :name: Private
725
+ "0027,1032":
726
+ :value: 74
727
+ :name: Private
728
+ "0027,1006":
729
+ :value: 0
730
+ :name: Private
731
+ 0023,107D:
732
+ :value: 0
733
+ :name: Private
734
+ 0021,105E:
735
+ :value: "0.000000"
736
+ :name: Private
737
+ "0020,0060":
738
+ :value:
739
+ :name: Laterality
740
+ 0019,10CB:
741
+ :value: 0
742
+ :name: Private
743
+ 0043,1080:
744
+ :value:
745
+ :name: Private
746
+ 0043,1028:
747
+ :value:
748
+ :name: Private
749
+ 0029,1035:
750
+ :value: 0
751
+ :name: Private
752
+ "0027,1033":
753
+ :value: 1073743872
754
+ :name: Private
755
+ 0021,105F:
756
+ :value: "0.000000"
757
+ :name: Private
758
+ 0010,21B0:
759
+ :value:
760
+ :name: Additional Patient History
761
+ 0019,100F:
762
+ :value: "244.100006"
763
+ :name: Private
764
+ "0023,0010":
765
+ :value: GEMS_STDY_01
766
+ :name: Private
767
+ 0019,10CC:
768
+ :value: 0
769
+ :name: Private
770
+ 0043,1081:
771
+ :value: C-GE_HDx 8HRBrain
772
+ :name: Private
773
+ 0043,1029:
774
+ :value:
775
+ :name: Private
776
+ "0027,1060":
777
+ :value: 256.0
778
+ :name: Private
779
+ 0019,10B0:
780
+ :value: "0.000000"
781
+ :name: Private
782
+ 0019,10CD:
783
+ :value: 0
784
+ :name: Private
785
+ 0043,1082:
786
+ :value: SRMode=200\GCoilType=8\gradientAmp=8920\lineFreq=60\RFampType=15
787
+ :name: Private
788
+ "0027,1061":
789
+ :value: 256.0
790
+ :name: Private
791
+ "0027,1035":
792
+ :value: 2
793
+ :name: Private
794
+ "0020,0037":
795
+ :value: 1\-0\0\-0\1\0
796
+ :name: Image Orientation (Patient)
797
+ 0019,10B1:
798
+ :value: "0.000000"
799
+ :name: Private
800
+ 0019,10CE:
801
+ :value: 2
802
+ :name: Private
803
+ 0043,1083:
804
+ :value: 0.546875\1
805
+ :name: Private
806
+ "0027,1062":
807
+ :value: 1.0
808
+ :name: Private
809
+ "0010,0020":
810
+ :value: ID
811
+ :name: Patient ID
812
+ 0019,10B2:
813
+ :value: "0.000000"
814
+ :name: Private
815
+ 0019,10CF:
816
+ :value: 0
817
+ :name: Private
818
+ 0043,1084:
819
+ :value: 10000\11\-1\0\ \YES\ARC
820
+ :name: Private
821
+ 0019,10B3:
822
+ :value: "0.000000"
823
+ :name: Private
824
+ "0002,0010":
825
+ :value: 1.2.840.10008.1.2.1
826
+ :name: Transfer Syntax UID
827
+ 0019,10B4:
828
+ :value: "0.000000"
829
+ :name: Private
830
+ 0019,10E0:
831
+ :value: "0.000000"
832
+ :name: Private
833
+ 0028,0010:
834
+ :value: 256
835
+ :name: Rows
836
+ 0019,10B5:
837
+ :value: "0.000000"
838
+ :name: Private
839
+ "0002,0012":
840
+ :value: 1.2.840.113619.6.260
841
+ :name: Implementation Class UID
842
+ "0040,0253":
843
+ :value:
844
+ :name: Performed Procedure Step ID
845
+ 0028,0011:
846
+ :value: 256
847
+ :name: Columns
848
+ 0019,10B6:
849
+ :value: "0.000000"
850
+ :name: Private
851
+ "0002,0013":
852
+ :value: S_NUEVO_20091020
853
+ :name: Implementation Version Name
854
+ 0019,10E2:
855
+ :value: "0.000000"
856
+ :name: Private
857
+ "0040,0254":
858
+ :value: RMRMABRAVOTEST
859
+ :name: Performed Procedure Step Description
860
+ 0019,109B:
861
+ :value: 1
862
+ :name: Private
863
+ 0018,1310:
864
+ :value: 256\0\0\256
865
+ :name: Acquisition Matrix
866
+ 0019,10B7:
867
+ :value: "0.000000"
868
+ :name: Private
869
+ "0021,0010":
870
+ :value: GEMS_RELA_01
871
+ :name: Private
872
+ 0043,1089:
873
+ :value: FDA\IEC_FIRST_LEVEL\IEC_FIRST_LEVEL
874
+ :name: Private
875
+ 0043,102A:
876
+ :value:
877
+ :name: Private
878
+ "0043,0010":
879
+ :value: GEMS_PARM_01
880
+ :name: Private
881
+ 0019,109C:
882
+ :value: BRAVO
883
+ :name: Private
884
+ 0019,10B8:
885
+ :value: "0.000000"
886
+ :name: Private
887
+ 0008,0016:
888
+ :value: 1.2.840.10008.5.1.4.1.1.4
889
+ :name: SOP Class UID
890
+ 0018,0091:
891
+ :value: "1"
892
+ :name: Echo Train Length
893
+ 0019,109D:
894
+ :value: "20100513042549"
895
+ :name: Private
896
+ 0018,1312:
897
+ :value: COL
898
+ :name: In-plane Phase Encoding Direction
899
+ 0019,10B9:
900
+ :value: "0.000000"
901
+ :name: Private
902
+ "0002,0016":
903
+ :value: RUBY_DICOM
904
+ :name: Source Application Entity Title
905
+ 0008,0070:
906
+ :value: GE MEDICAL SYSTEMS
907
+ :name: Manufacturer
908
+ 0043,102C:
909
+ :value: 0
910
+ :name: Private
911
+ 0019,1081:
912
+ :value: 0
913
+ :name: Private
914
+ 0019,109E:
915
+ :value: EFGRE3D
916
+ :name: Private
917
+ 0008,0018:
918
+ :value: 1.2.840.113619.2.260.6945.1176948.29385.1288985252.77
919
+ :name: SOP Instance UID
920
+ 0043,102D:
921
+ :value:
922
+ :name: Private
923
+ 0018,0093:
924
+ :value: "100"
925
+ :name: Percent Sampling
926
+ 0020,000D:
927
+ :value: 1.2.840.113619.6.260.4.1294724594.737.1289407877.724
928
+ :name: Study Instance UID
929
+ 0009,10E3:
930
+ :value: 1.2.840.113619.1.260.5.6945.1176948
931
+ :name: Private
932
+ 0019,109F:
933
+ :value: -32752
934
+ :name: Private
935
+ 0018,1314:
936
+ :value: "12"
937
+ :name: Flip Angle