mspire 0.7.18 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/bin/mspire +5 -0
- data/lib/core_ext/enumerable.rb +8 -0
- data/lib/mspire/commandline.rb +39 -0
- data/lib/mspire/cv/paramable.rb +72 -35
- data/lib/mspire/imzml/writer/commandline.rb +16 -7
- data/lib/mspire/imzml/writer.rb +22 -14
- data/lib/mspire/mzml/activation.rb +0 -5
- data/lib/mspire/mzml/chromatogram.rb +41 -6
- data/lib/mspire/mzml/chromatogram_list.rb +2 -19
- data/lib/mspire/mzml/component.rb +28 -4
- data/lib/mspire/mzml/cv.rb +1 -0
- data/lib/mspire/mzml/data_array.rb +164 -154
- data/lib/mspire/mzml/data_array_container_like.rb +6 -13
- data/lib/mspire/mzml/data_processing.rb +19 -5
- data/lib/mspire/mzml/file_description.rb +22 -4
- data/lib/mspire/mzml/index.rb +53 -0
- data/lib/mspire/mzml/index_list.rb +64 -55
- data/lib/mspire/mzml/instrument_configuration.rb +22 -7
- data/lib/mspire/mzml/io_index.rb +79 -0
- data/lib/mspire/mzml/io_indexable_list.rb +71 -0
- data/lib/mspire/mzml/isolation_window.rb +0 -5
- data/lib/mspire/mzml/parser.rb +10 -0
- data/lib/mspire/mzml/plms1.rb +14 -24
- data/lib/mspire/mzml/precursor.rb +41 -19
- data/lib/mspire/mzml/processing_method.rb +34 -7
- data/lib/mspire/mzml/product.rb +14 -1
- data/lib/mspire/mzml/reader.rb +154 -0
- data/lib/mspire/mzml/referenceable_param_group.rb +9 -2
- data/lib/mspire/mzml/run.rb +62 -5
- data/lib/mspire/mzml/sample.rb +16 -6
- data/lib/mspire/mzml/scan.rb +31 -16
- data/lib/mspire/mzml/scan_list.rb +18 -5
- data/lib/mspire/mzml/scan_settings.rb +4 -5
- data/lib/mspire/mzml/scan_window.rb +0 -6
- data/lib/mspire/mzml/selected_ion.rb +1 -8
- data/lib/mspire/mzml/software.rb +9 -4
- data/lib/mspire/mzml/source_file.rb +8 -4
- data/lib/mspire/mzml/spectrum.rb +60 -35
- data/lib/mspire/mzml/spectrum_list.rb +5 -34
- data/lib/mspire/mzml.rb +72 -210
- data/lib/mspire/plms1.rb +3 -0
- data/spec/mspire/cv/paramable_spec.rb +3 -3
- data/spec/mspire/mzml/data_array_spec.rb +19 -6
- data/spec/mspire/mzml/file_content_spec.rb +1 -4
- data/spec/mspire/mzml/index_list_spec.rb +5 -12
- data/spec/mspire/mzml/plms1_spec.rb +5 -9
- data/spec/mspire/mzml/referenceable_param_group_spec.rb +3 -3
- data/spec/mspire/mzml/source_file_spec.rb +1 -2
- data/spec/mspire/mzml/spectrum_list_spec.rb +54 -0
- data/spec/mspire/mzml/spectrum_spec.rb +2 -4
- data/spec/mspire/mzml_spec.rb +241 -21
- data/spec/spec_helper.rb +1 -0
- data/spec/testfiles/mspire/mzml/1_BB7_SIM_478.5.mzML +103 -0
- data/spec/testfiles/mspire/mzml/j24z.idx_comp.3.mzML +6 -6
- metadata +14 -6
- data/bin/mzml_to_imzml +0 -9
- data/spec/mspire/mzml/file_description_spec.rb +0 -12
data/lib/mspire/mzml/run.rb
CHANGED
@@ -1,4 +1,7 @@
|
|
1
1
|
require 'mspire/cv/paramable'
|
2
|
+
require 'mspire/mzml/io_index'
|
3
|
+
require 'mspire/mzml/spectrum_list'
|
4
|
+
require 'mspire/mzml/chromatogram_list'
|
2
5
|
|
3
6
|
module Mspire
|
4
7
|
class Mzml
|
@@ -27,11 +30,13 @@ module Mspire
|
|
27
30
|
attr_accessor :chromatogram_list
|
28
31
|
|
29
32
|
# yields self if given a block
|
30
|
-
def initialize(id, default_instrument_configuration
|
33
|
+
def initialize(id, default_instrument_configuration)
|
31
34
|
@id = id
|
32
35
|
@default_instrument_configuration = default_instrument_configuration
|
33
|
-
|
34
|
-
|
36
|
+
params_init
|
37
|
+
if block_given?
|
38
|
+
yield self
|
39
|
+
end
|
35
40
|
end
|
36
41
|
|
37
42
|
def to_xml(builder)
|
@@ -41,14 +46,66 @@ module Mspire
|
|
41
46
|
atts[:defaultSourceFileRef] = @default_source_file.id if @default_source_file
|
42
47
|
atts[:sampleRef] = @sample.id if @sample
|
43
48
|
atts[:startTimeStamp] = @start_time_stamp if @start_time_stamp
|
49
|
+
|
50
|
+
default_ids = { instrument_configuration: @default_instrument_configuration.id }
|
44
51
|
|
45
52
|
builder.run(atts) do |run_n|
|
46
53
|
super(run_n)
|
47
|
-
spectrum_list.to_xml(run_n) if spectrum_list
|
48
|
-
chromatogram_list.to_xml(run_n) if chromatogram_list
|
54
|
+
spectrum_list.to_xml(run_n, default_ids) if spectrum_list
|
55
|
+
chromatogram_list.to_xml(run_n, default_ids) if chromatogram_list
|
49
56
|
end
|
50
57
|
builder
|
51
58
|
end
|
59
|
+
|
60
|
+
# expects link to have the following keys:
|
61
|
+
#
|
62
|
+
# :ref_hash
|
63
|
+
# :instrument_config_hash
|
64
|
+
# :source_file_hash
|
65
|
+
# :sample_hash
|
66
|
+
# :data_processing_hash
|
67
|
+
# :spectrum_default_data_processing
|
68
|
+
# :chromatogram_default_data_processing
|
69
|
+
# :index_list
|
70
|
+
def self.from_xml(io, xml, link)
|
71
|
+
|
72
|
+
# expects that the DataProcessing objects to link to have *already* been
|
73
|
+
# parsed (parse the defaultDataProcessingRef's after grabbing the
|
74
|
+
# index, then grab the DataProcessing object associated with that id).
|
75
|
+
|
76
|
+
obj = self.new(xml[:id],
|
77
|
+
link[:instrument_configuration_hash][xml[:defaultInstrumentConfigurationRef]]
|
78
|
+
)
|
79
|
+
obj.start_time_stamp = xml[:startTimeStamp]
|
80
|
+
|
81
|
+
link[:default_instrument_configuration] = obj.default_instrument_configuration
|
82
|
+
|
83
|
+
# two optional object refs
|
84
|
+
if def_source_ref=xml[:defaultSourceFileRef]
|
85
|
+
obj.default_source_file = link[:source_file_hash][def_source_ref]
|
86
|
+
end
|
87
|
+
if sample_ref=xml[:sampleRef]
|
88
|
+
obj.sample = link[:sample_hash][sample_ref]
|
89
|
+
end
|
90
|
+
|
91
|
+
obj.describe_from_xml!(xml, link[:ref_hash])
|
92
|
+
|
93
|
+
index_list = link[:index_list]
|
94
|
+
[:spectrum, :chromatogram].each do |list_type|
|
95
|
+
next unless (byte_index = index_list[list_type])
|
96
|
+
|
97
|
+
io_index = IOIndex.new(io, byte_index, link)
|
98
|
+
|
99
|
+
list_obj = Mspire::Mzml.const_get(list_type.to_s.capitalize + "List")
|
100
|
+
.new(link["#{list_type}_default_data_processing".to_sym],
|
101
|
+
io_index,
|
102
|
+
Hash[byte_index.ids.each_with_index.map.to_a]
|
103
|
+
)
|
104
|
+
|
105
|
+
obj.send(list_type.to_s + "_list=", list_obj)
|
106
|
+
end
|
107
|
+
obj
|
108
|
+
end
|
52
109
|
end
|
53
110
|
end
|
54
111
|
end
|
data/lib/mspire/mzml/sample.rb
CHANGED
@@ -5,13 +5,18 @@ module Mspire
|
|
5
5
|
class Mzml
|
6
6
|
class Sample
|
7
7
|
include Mspire::CV::Paramable
|
8
|
+
extend Mspire::Mzml::List
|
8
9
|
|
9
|
-
|
10
|
+
# A unique identifier across the samples with which to reference this sample description.
|
11
|
+
attr_accessor :id
|
10
12
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
13
|
+
# An optional name for the sample description, mostly intended as a quick mnemonic.
|
14
|
+
attr_accessor :name
|
15
|
+
|
16
|
+
def initialize(id)
|
17
|
+
@id = id
|
18
|
+
params_init
|
19
|
+
yield(self) if block_given?
|
15
20
|
end
|
16
21
|
|
17
22
|
def to_xml(builder)
|
@@ -21,7 +26,12 @@ module Mspire
|
|
21
26
|
builder
|
22
27
|
end
|
23
28
|
|
24
|
-
|
29
|
+
def self.from_xml(xml, link)
|
30
|
+
obj = self.new(xml[:id])
|
31
|
+
obj.name = xml[:name]
|
32
|
+
obj.describe_self_from_xml!(xml, link[:ref_hash])
|
33
|
+
end
|
34
|
+
|
25
35
|
end
|
26
36
|
end
|
27
37
|
end
|
data/lib/mspire/mzml/scan.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'mspire/cv/paramable'
|
2
|
+
require 'mspire/cv/paramable'
|
2
3
|
require 'mspire/mzml/scan_window'
|
3
4
|
|
4
5
|
module Mspire
|
@@ -14,31 +15,41 @@ module Mspire
|
|
14
15
|
# a boolean indicating the spectrum is from an external source file
|
15
16
|
attr_accessor :from_external_source_file
|
16
17
|
|
17
|
-
# an InstrumentConfiguration object
|
18
|
+
# an InstrumentConfiguration object (optional).
|
18
19
|
attr_accessor :instrument_configuration
|
19
20
|
|
20
21
|
# ScanWindow objects
|
21
22
|
attr_accessor :scan_windows
|
22
23
|
|
23
|
-
def initialize
|
24
|
-
|
25
|
-
|
24
|
+
def initialize
|
25
|
+
params_init
|
26
|
+
yield(self) if block_given?
|
26
27
|
end
|
27
28
|
|
28
|
-
#
|
29
|
-
#
|
30
|
-
#
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
[:
|
35
|
-
|
36
|
-
|
29
|
+
# link should have:
|
30
|
+
#
|
31
|
+
# :ref_hash
|
32
|
+
# :default_instrument_configuration
|
33
|
+
# :instrument_configuration_hash
|
34
|
+
def self.from_xml(xml, link)
|
35
|
+
ref_hash = link[:ref_hash]
|
36
|
+
obj = self.new
|
37
|
+
obj.instrument_configuration =
|
38
|
+
if icf = xml[:instrumentConfigurationRef]
|
39
|
+
link[:instrument_configuration_hash][icf]
|
40
|
+
else
|
41
|
+
link[:default_instrument_configuration]
|
42
|
+
end
|
43
|
+
scan_window_list_n = obj.describe_from_xml!(xml, ref_hash)
|
44
|
+
if scan_window_list_n
|
45
|
+
obj.scan_windows = scan_window_list_n.children.map do |scan_window_n|
|
46
|
+
Mspire::Mzml::ScanWindow.new.describe_self_from_xml!(scan_window_n, ref_hash)
|
47
|
+
end
|
37
48
|
end
|
38
|
-
|
49
|
+
obj
|
39
50
|
end
|
40
51
|
|
41
|
-
def to_xml(builder)
|
52
|
+
def to_xml(builder, default_ids)
|
42
53
|
atts = {}
|
43
54
|
if @from_external_source_file
|
44
55
|
atts[:sourceFileRef] = @spectrum.source_file.id
|
@@ -46,7 +57,11 @@ module Mspire
|
|
46
57
|
else
|
47
58
|
atts[:spectrumRef] = @spectrum.id if @spectrum
|
48
59
|
end
|
49
|
-
|
60
|
+
if @instrument_configuration
|
61
|
+
unless @instrument_configuration.id == default_ids[:instrument_configuration]
|
62
|
+
atts[:instrumentConfigurationRef] = @instrument_configuration.id
|
63
|
+
end
|
64
|
+
end
|
50
65
|
builder.scan(atts) do |prec_n|
|
51
66
|
super(prec_n) # description
|
52
67
|
ScanWindow.list_xml(@scan_windows, prec_n) if @scan_windows
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'mspire/cv/paramable'
|
2
|
+
require 'mspire/mzml/scan'
|
2
3
|
|
3
4
|
module Mspire
|
4
5
|
class Mzml
|
@@ -12,21 +13,33 @@ module Mspire
|
|
12
13
|
class ScanList < Array
|
13
14
|
include Mspire::CV::Paramable
|
14
15
|
|
15
|
-
def initialize
|
16
|
-
|
17
|
-
|
16
|
+
def initialize
|
17
|
+
params_init
|
18
|
+
yield(self) if block_given?
|
18
19
|
end
|
19
20
|
|
20
|
-
def to_xml(builder)
|
21
|
+
def to_xml(builder, default_ids)
|
21
22
|
builder.scanList(count: self.size) do |sl_n|
|
22
23
|
super(sl_n)
|
23
24
|
self.each do |scan|
|
24
|
-
scan.to_xml(sl_n)
|
25
|
+
scan.to_xml(sl_n, default_ids)
|
25
26
|
end
|
26
27
|
end
|
27
28
|
builder
|
28
29
|
end
|
29
30
|
|
31
|
+
def self.from_xml(xml, link)
|
32
|
+
scan_list = self.new
|
33
|
+
scan_n = scan_list.describe_from_xml!(xml, link[:ref_hash])
|
34
|
+
if scan_n
|
35
|
+
loop do
|
36
|
+
scan_list << Mspire::Mzml::Scan.from_xml(scan_n, link)
|
37
|
+
break unless scan_n = scan_n.next
|
38
|
+
end
|
39
|
+
end
|
40
|
+
scan_list
|
41
|
+
end
|
42
|
+
|
30
43
|
alias_method :list_xml, :to_xml
|
31
44
|
end
|
32
45
|
end
|
@@ -5,13 +5,14 @@ module Mspire
|
|
5
5
|
class Mzml
|
6
6
|
class ScanSettings
|
7
7
|
include Mspire::CV::Paramable
|
8
|
+
extend Mspire::Mzml::List
|
8
9
|
|
9
10
|
attr_accessor :id
|
10
11
|
|
11
|
-
def initialize(id
|
12
|
+
def initialize(id)
|
12
13
|
@id = id
|
13
|
-
|
14
|
-
|
14
|
+
params_init
|
15
|
+
yield(self) if block_given?
|
15
16
|
end
|
16
17
|
|
17
18
|
def to_xml(builder)
|
@@ -21,8 +22,6 @@ module Mspire
|
|
21
22
|
builder
|
22
23
|
end
|
23
24
|
|
24
|
-
extend(Mspire::Mzml::List)
|
25
|
-
|
26
25
|
end
|
27
26
|
end
|
28
27
|
end
|
@@ -8,12 +8,6 @@ module Mspire
|
|
8
8
|
# accession="MS:1000500" name="scan window upper limit" value="1800"
|
9
9
|
class ScanWindow
|
10
10
|
include Mspire::CV::Paramable
|
11
|
-
|
12
|
-
def self.from_xml(xml)
|
13
|
-
obj = self.new
|
14
|
-
[:cvParam, :userParam].each {|v| obj.describe! xml.xpath("./#{v}") }
|
15
|
-
obj
|
16
|
-
end
|
17
11
|
end
|
18
12
|
end
|
19
13
|
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'mspire/mzml/list'
|
2
2
|
require 'mspire/cv/paramable'
|
3
3
|
|
4
|
-
|
5
4
|
module Mspire
|
6
5
|
class Mzml
|
7
6
|
# MUST supply a *child* term of MS:1000455 (ion selection attribute) one or more times
|
@@ -12,13 +11,7 @@ module Mspire
|
|
12
11
|
# e.g.: MS:1000744 (selected ion m/z)
|
13
12
|
class SelectedIon
|
14
13
|
include Mspire::CV::Paramable
|
15
|
-
extend
|
16
|
-
|
17
|
-
def self.from_xml(xml)
|
18
|
-
obj = self.new
|
19
|
-
[:cvParam, :userParam].each {|v| obj.describe! xml.xpath("./#{v}") }
|
20
|
-
obj
|
21
|
-
end
|
14
|
+
extend Mspire::Mzml::List
|
22
15
|
end
|
23
16
|
end
|
24
17
|
end
|
data/lib/mspire/mzml/software.rb
CHANGED
@@ -6,13 +6,14 @@ module Mspire
|
|
6
6
|
class Mzml
|
7
7
|
class Software
|
8
8
|
include Mspire::CV::Paramable
|
9
|
+
extend Mspire::Mzml::List
|
9
10
|
|
10
11
|
attr_accessor :id, :version
|
11
12
|
|
12
|
-
def initialize(id='mspire', version=Mspire::VERSION
|
13
|
+
def initialize(id='mspire', version=Mspire::VERSION)
|
13
14
|
@id, @version = id, version
|
14
|
-
|
15
|
-
|
15
|
+
params_init
|
16
|
+
yield(self) if block_given?
|
16
17
|
end
|
17
18
|
|
18
19
|
def to_xml(builder)
|
@@ -22,7 +23,11 @@ module Mspire
|
|
22
23
|
builder
|
23
24
|
end
|
24
25
|
|
25
|
-
|
26
|
+
def self.from_xml(xml, link)
|
27
|
+
obj = self.new(xml[:id], xml[:version])
|
28
|
+
obj.describe_self_from_xml!(xml, link[:ref_hash])
|
29
|
+
end
|
30
|
+
|
26
31
|
end
|
27
32
|
end
|
28
33
|
end
|
@@ -6,6 +6,7 @@ module Mspire
|
|
6
6
|
class Mzml
|
7
7
|
class SourceFile
|
8
8
|
include Mspire::CV::Paramable
|
9
|
+
extend Mspire::Mzml::List
|
9
10
|
|
10
11
|
DEFAULT_SOURCEFILE_ID = 'sourcefile1'
|
11
12
|
|
@@ -31,10 +32,10 @@ module Mspire
|
|
31
32
|
[pathname.basename, 'file://'+ dir]
|
32
33
|
end
|
33
34
|
|
34
|
-
def initialize(id="sourcefile1", name="mspire-simulated", location='file://'
|
35
|
+
def initialize(id="sourcefile1", name="mspire-simulated", location='file://')
|
35
36
|
@id, @name, @location = id, name, location
|
36
|
-
|
37
|
-
|
37
|
+
params_init
|
38
|
+
yield(self) if block_given?
|
38
39
|
end
|
39
40
|
|
40
41
|
def to_xml(builder)
|
@@ -44,7 +45,10 @@ module Mspire
|
|
44
45
|
builder
|
45
46
|
end
|
46
47
|
|
47
|
-
|
48
|
+
def self.from_xml(xml, ref_hash)
|
49
|
+
self.new(xml[:id], xml[:name], xml[:location]).describe_self_from_xml!(xml, ref_hash)
|
50
|
+
end
|
51
|
+
|
48
52
|
end
|
49
53
|
end
|
50
54
|
end
|
data/lib/mspire/mzml/spectrum.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
|
-
|
1
|
+
|
2
2
|
require 'mspire/spectrum_like'
|
3
3
|
require 'mspire/mzml/data_array'
|
4
|
+
require 'mspire/mzml/data_array_container_like'
|
4
5
|
require 'mspire/mzml/scan_list'
|
5
6
|
require 'mspire/mzml/precursor'
|
6
7
|
require 'mspire/mzml/product'
|
@@ -48,6 +49,8 @@ module Mspire
|
|
48
49
|
# (optional) an Mspire::Mzml::SourceFile object
|
49
50
|
attr_accessor :source_file
|
50
51
|
|
52
|
+
# data_processing is included with DataArrayContainerLike
|
53
|
+
|
51
54
|
# (optional) The identifier for the spot from which this spectrum was derived, if a
|
52
55
|
# MALDI or similar run.
|
53
56
|
attr_accessor :spot_id
|
@@ -107,58 +110,80 @@ module Mspire
|
|
107
110
|
end
|
108
111
|
|
109
112
|
# takes a Nokogiri node and sets relevant properties
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
113
|
+
#
|
114
|
+
# link is a hash that should contain the following keys and associated
|
115
|
+
# objects (some are required by downstream objects, like Scan):
|
116
|
+
#
|
117
|
+
# :ref_hash id -> ReferenceableParamGroup
|
118
|
+
# :spectrum_list SpectrumList object
|
119
|
+
# :data_processing_hash id -> DataProcessing object
|
120
|
+
# :default_data_processing DataProcessing object
|
121
|
+
# :instrument_configuration_hash id -> InstrumentConfiguration object
|
122
|
+
# :default_instrument_configuration InstrumentConfiguration object
|
123
|
+
# :source_file_hash id -> SourceFile object
|
124
|
+
def self.from_xml(xml, link)
|
125
|
+
obj = self.new(xml[:id])
|
126
|
+
obj.spot_id = xml[:spotID]
|
127
|
+
|
128
|
+
obj.data_processing = link[:data_processing_hash][xml[:dataProcessingRef]] || link[:spectrum_default_data_processing]
|
129
|
+
|
130
|
+
if source_file_ref=xml[:sourceFileRef]
|
131
|
+
obj.source_file = link[:source_file_hash][source_file_ref]
|
132
|
+
end
|
114
133
|
|
115
|
-
|
134
|
+
xml_n = obj.describe_from_xml!(xml, link[:ref_hash])
|
135
|
+
return obj unless xml_n
|
116
136
|
|
117
|
-
|
118
|
-
|
119
|
-
|
137
|
+
loop do
|
138
|
+
case xml_n.name
|
139
|
+
when 'scanList'
|
140
|
+
obj.scan_list = Mspire::Mzml::ScanList.from_xml(xml_n, link)
|
141
|
+
when 'precursorList'
|
142
|
+
obj.precursors = xml_n.children.map do |prec_n|
|
143
|
+
Mspire::Mzml::Precursor.from_xml(prec_n, link)
|
144
|
+
end
|
145
|
+
when 'productList'
|
146
|
+
obj.products = xml_n.children.map do |product_n|
|
147
|
+
Mspire::Mzml::Product.from_xml(product_n, link)
|
148
|
+
end
|
149
|
+
when 'binaryDataArrayList'
|
150
|
+
obj.data_arrays = Mspire::Mzml::DataArray.data_arrays_from_xml(xml_n, link)
|
151
|
+
end
|
152
|
+
break unless xml_n = xml_n.next
|
120
153
|
end
|
121
|
-
|
122
|
-
|
123
|
-
spec.precursors = xml.xpath('./precursorList/precursor').map do |prec_n|
|
124
|
-
Mspire::Mzml::Precursor.from_xml(prec_n)
|
154
|
+
unless obj.data_arrays
|
155
|
+
obj.data_arrays = Mspire::Mzml::DataArray.empty_data_arrays
|
125
156
|
end
|
126
157
|
|
127
|
-
data_arrays = xml.xpath('./binaryDataArrayList/binaryDataArray').map do |binary_data_array_n|
|
128
|
-
accessions = binary_data_array_n.xpath('./cvParam').map {|node| node['accession'] }
|
129
|
-
base64 = binary_data_array_n.xpath('./binary').text
|
130
|
-
Mspire::Mzml::DataArray.from_binary(base64, accessions)
|
131
|
-
end
|
132
158
|
|
133
|
-
|
134
|
-
|
135
|
-
data_arrays = [Mspire::Mzml::DataArray.new, Mspire::Mzml::DataArray.new] if data_arrays.size == 0
|
136
|
-
spec.data_arrays = data_arrays
|
137
|
-
spec
|
159
|
+
|
160
|
+
obj
|
138
161
|
end
|
139
162
|
|
140
163
|
# the most common param to pass in would be ms level: 'MS:1000511'
|
141
164
|
#
|
142
|
-
# This would generate a spectrum of ms_level
|
165
|
+
# This would generate a spectrum of ms_level 2 :
|
143
166
|
#
|
144
|
-
# Mspire::Mzml::Spectrum.new(
|
167
|
+
# spec = Mspire::Mzml::Spectrum.new("scan=1").describe!('MS:1000511')
|
145
168
|
#
|
146
|
-
def initialize(id
|
169
|
+
def initialize(id)
|
147
170
|
@id = id
|
148
|
-
params_initialize
|
149
|
-
|
171
|
+
params_initialize
|
172
|
+
yield(self) if block_given?
|
150
173
|
end
|
151
174
|
|
152
|
-
|
153
175
|
# see SpectrumList for generating the entire list
|
154
|
-
def to_xml(builder)
|
155
|
-
atts =
|
176
|
+
def to_xml(builder, default_ids)
|
177
|
+
atts = data_array_xml_atts(default_ids)
|
156
178
|
atts[:sourceFileRef] = @source_file.id if @source_file
|
157
179
|
atts[:spotID] = @spot_id if @spot_id
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
180
|
+
|
181
|
+
builder.spectrum(atts) do |sp_n|
|
182
|
+
super(sp_n)
|
183
|
+
@scan_list.list_xml( sp_n, default_ids ) if @scan_list
|
184
|
+
Mspire::Mzml::Precursor.list_xml(@precursors, sp_n) if @precursors
|
185
|
+
Mspire::Mzml::Product.list_xml(@products, sp_n) if @products
|
186
|
+
Mspire::Mzml::DataArray.list_xml(@data_arrays, sp_n) if @data_arrays
|
162
187
|
end
|
163
188
|
end
|
164
189
|
|
@@ -1,43 +1,14 @@
|
|
1
|
-
require 'mspire/mzml/
|
1
|
+
require 'mspire/mzml/io_indexable_list'
|
2
2
|
|
3
3
|
module Mspire
|
4
4
|
class Mzml
|
5
|
-
class SpectrumList <
|
5
|
+
class SpectrumList < IOIndexableList
|
6
6
|
|
7
|
-
|
8
|
-
attr_reader :default_data_processing
|
7
|
+
attr_accessor :scan_to_index
|
9
8
|
|
10
|
-
def
|
11
|
-
@
|
12
|
-
super(spectra)
|
9
|
+
def fetch_by_scan_num(scan_num)
|
10
|
+
__getobj__[@scan_to_index[scan_num]]
|
13
11
|
end
|
14
|
-
|
15
|
-
# This method takes an object responding to :data, creates a new
|
16
|
-
# Mspire::Mzml::Spectrum object with that data and puts it in the internal
|
17
|
-
# list
|
18
|
-
def add_ms_spectrum!(spectrum, id)
|
19
|
-
mzml_spec = Mspire::Mzml::Spectrum.new(id)
|
20
|
-
mzml_spec.data = spectrum.data
|
21
|
-
self << mzml_spec
|
22
|
-
end
|
23
|
-
|
24
|
-
# takes an array of spectra and performs add_spectrum on each
|
25
|
-
# returns self
|
26
|
-
def add_ms_spectra!(spectra, ids=[])
|
27
|
-
spectra.zip(ids).each_with_index {|(spec,id),i| add_spectrum(spec, "spectrum=#{i+1}") }
|
28
|
-
self
|
29
|
-
end
|
30
|
-
|
31
|
-
def to_xml(builder)
|
32
|
-
builder.spectrumList(count: self.size, defaultDataProcessingRef: @default_data_processing.id) do |spl_n|
|
33
|
-
self.each_with_index do |spectrum,i|
|
34
|
-
spectrum.index = i unless spectrum.index
|
35
|
-
spectrum.to_xml(spl_n)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
builder
|
39
|
-
end
|
40
|
-
|
41
12
|
end
|
42
13
|
end
|
43
14
|
end
|