metamri 0.1.23 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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