mspire 0.6.22 → 0.6.24

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.
@@ -176,24 +176,6 @@ module MS
176
176
  mzml.each(&block)
177
177
  end
178
178
  end
179
-
180
- # unpack binary data based on an accesions. accessions must only
181
- # respond to :include? So, hash keys, a set, or an array will all work.
182
- def unpack_binary(base64string, accessions)
183
- compressed =
184
- if accessions.include?('MS:1000574') then true # zlib compression
185
- elsif accessions.include?('MS:1000576') then false # no compression
186
- else raise 'no compression info: check your MS accession numbers'
187
- end
188
- precision_unpack =
189
- if accessions.include?('MS:1000523') then 'E*'
190
- elsif accessions.include?('MS:1000521') then 'e*'
191
- else raise 'unrecognized precision: check your MS accession numbers'
192
- end
193
- data = base64string.unpack("m*").first
194
- unzipped = compressed ? Zlib::Inflate.inflate(data) : data
195
- unzipped.unpack(precision_unpack)
196
- end
197
179
  end
198
180
 
199
181
  # name can be :spectrum or :chromatogram
@@ -5,6 +5,7 @@ require 'ms/cv/paramable'
5
5
  module MS
6
6
  class Mzml
7
7
  class DataArray < Array
8
+ alias_method :array_initialize, :initialize
8
9
  include MS::CV::Paramable
9
10
 
10
11
  DEFAULT_DTYPE = :float64
@@ -17,17 +18,76 @@ module MS
17
18
  int32: 'MS:1000519', # signed
18
19
  }
19
20
 
20
- # the type of data array (:mz or :intensity)
21
+ # the type of data array (:mz, :intensity, :mz_external, or :intensity_external)
21
22
  attr_accessor :type
22
23
 
23
- # requires a type, :mz, :intensity, :mz_external, or :intensity_external
24
- # (external types used in imzml)
25
- def initialize(_type, opts={params: []})
26
- @type = _type
27
- @external = !!(@type.to_s =~ /external$/)
24
+ def initialize(*args)
25
+ array_initialize(*args)
28
26
  end
29
27
 
30
- def self.to_binary(array_ish, dtype=DEFAULT_DTYPE, compression=DEFAULT_COMPRESSION)
28
+ # returns a new MS::Mzml::DataArray object (an array)
29
+ #
30
+ # args:
31
+ # base64, set-like # where set-like responds to include?
32
+ # base64, type=:float64, compression=true
33
+ #
34
+ # examples:
35
+ # MS::Mzml::Spectrum.unpack_binary('eJxjYACBD/YMEOAAoTgcABe3Abg=', ['MS:1000574', MS:1000523']).
36
+ # MS::Mzml::Spectrum.unpack_binary("ADBA/=", :float32, true)
37
+ # MS::Mzml::Spectrum.unpack_binary("ADBA/=") # uses float64 and compression
38
+ def self.from_binary(base64, *args)
39
+ if args.first.respond_to?(:include?)
40
+ accessions = args.first
41
+ compressed =
42
+ if accessions.include?('MS:1000574') then true # zlib compression
43
+ elsif accessions.include?('MS:1000576') then false # no compression
44
+ else raise 'no compression info: check your MS accession numbers'
45
+ end
46
+ precision_unpack =
47
+ if accessions.include?('MS:1000523') then 'E*'
48
+ elsif accessions.include?('MS:1000521') then 'e*'
49
+ else raise 'unrecognized precision: check your MS accession numbers'
50
+ end
51
+ else
52
+ compressed = args.last || true
53
+ precision_unpack =
54
+ case args.first
55
+ when :float64
56
+ 'E*'
57
+ when :float32
58
+ 'e*'
59
+ when nil
60
+ 'E*'
61
+ else
62
+ raise ArgumentError, "#{args.first} must be one of :float64, :float32 or other acceptable type"
63
+ end
64
+ end
65
+ data = base64.unpack("m*").first
66
+ unzipped = compressed ? Zlib::Inflate.inflate(data) : data
67
+ self.new( unzipped.unpack(precision_unpack) )
68
+ end
69
+
70
+ # returns a base64 string that can be used for xml representations of
71
+ # the data
72
+ #
73
+ # args:
74
+ # array-like set-like # where set-like responds to include?
75
+ # array-like type=:float64, compression=true
76
+ def self.to_binary(array_ish, *args)
77
+ if args.first.respond_to?(:include?)
78
+ accessions = args.first
79
+ dtype =
80
+ if accessions.include?('MS:1000521')
81
+ :float32
82
+ else
83
+ :float64
84
+ end
85
+ compression = accessions.include?('MS:1000576') ? false : true
86
+ else
87
+ dtype = args[0] || DEFAULT_DTYPE
88
+ compression = args[1] || DEFAULT_COMPRESSION
89
+ end
90
+
31
91
  pack_code =
32
92
  case dtype
33
93
  when :float64 ; 'E*'
@@ -42,6 +102,11 @@ module MS
42
102
  Base64.strict_encode64(string)
43
103
  end
44
104
 
105
+ # calls the class to_binary method with self and the given args
106
+ def to_binary(*args)
107
+ self.class.to_binary(self, *args)
108
+ end
109
+
45
110
  def to_xml(builder, dtype=DEFAULT_DTYPE, compression=DEFAULT_COMPRESSION)
46
111
  encoded_length =
47
112
  if @external
@@ -56,8 +121,11 @@ module MS
56
121
  unless @external
57
122
  MS::CV::Param[ DTYPE_TO_ACC[dtype] ].to_xml(bda_n)
58
123
  MS::CV::Param[ compression ? 'MS:1000574' : 'MS:1000576' ].to_xml(bda_n)
59
- MS::CV::Param[ (@type == :mz) ? 'MS:1000514' : 'MS:1000515' ].to_xml(bda_n) # must be m/z or intensity
60
- bda_n.binary(base64)
124
+ if @type
125
+ accession = ( (@type == :mz) ? 'MS:1000514' : 'MS:1000515' )
126
+ MS::CV::Param[accession].to_xml(bda_n)
127
+ bda_n.binary(base64)
128
+ end
61
129
  end
62
130
  end
63
131
  end
@@ -70,8 +138,8 @@ module MS
70
138
  if data_ar.is_a?(MS::Mzml::DataArray)
71
139
  data_ar
72
140
  else
73
- real_data_array = MS::Mzml::DataArray.new(typ)
74
- real_data_array.replace(data_ar)
141
+ real_data_array = MS::Mzml::DataArray.new(data_ar)
142
+ real_data_array.type = typ
75
143
  real_data_array
76
144
  end
77
145
  ar.type = typ unless ar.type
@@ -83,16 +83,15 @@ module MS
83
83
  data_arrays = xml.xpath('./binaryDataArrayList/binaryDataArray').map do |binary_data_array_n|
84
84
  accessions = binary_data_array_n.xpath('./cvParam').map {|node| node['accession'] }
85
85
  base64 = binary_data_array_n.xpath('./binary').text
86
- MS::Mzml.unpack_binary(base64, accessions)
86
+ MS::Mzml::DataArray.from_binary(base64, accessions)
87
87
  end
88
88
  # if there is no spectrum, we will still return a spectrum object, it
89
89
  # just has no mzs or intensities
90
- data_arrays = [[], []] if data_arrays.size == 0
90
+ data_arrays = [MS::Mzml::DataArray.new, MS::Mzml::DataArray.new] if data_arrays.size == 0
91
91
  spec.data_arrays = data_arrays
92
92
  spec
93
93
  end
94
94
 
95
-
96
95
  # the most common param to pass in would be ms level: 'MS:1000511'
97
96
  #
98
97
  # This would generate a spectrum of ms_level=2 :
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "mspire"
8
- s.version = "0.6.22"
8
+ s.version = "0.6.24"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["John T. Prince", "Simon Chiang"]
12
- s.date = "2012-02-29"
12
+ s.date = "2012-03-13"
13
13
  s.description = "mass spectrometry proteomics, lipidomics, and tools, a rewrite of mspire, merging of ms-* gems"
14
14
  s.email = "jtprince@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -56,7 +56,9 @@ Gem::Specification.new do |s|
56
56
  "lib/ms/ident/protein.rb",
57
57
  "lib/ms/ident/protein_group.rb",
58
58
  "lib/ms/ident/search.rb",
59
+ "lib/ms/isotope.rb",
59
60
  "lib/ms/isotope/aa.rb",
61
+ "lib/ms/isotope/nist_isotope_info.yml",
60
62
  "lib/ms/mascot.rb",
61
63
  "lib/ms/mass.rb",
62
64
  "lib/ms/mass/aa.rb",
@@ -112,6 +114,7 @@ Gem::Specification.new do |s|
112
114
  "obo/ims.obo",
113
115
  "obo/ms.obo",
114
116
  "obo/unit.obo",
117
+ "script/mzml_read_binary.rb",
115
118
  "spec/bin_spec.rb",
116
119
  "spec/ms/cv/param_spec.rb",
117
120
  "spec/ms/digester_spec.rb",
@@ -123,8 +126,10 @@ Gem::Specification.new do |s|
123
126
  "spec/ms/ident/pepxml_spec.rb",
124
127
  "spec/ms/ident/protein_group_spec.rb",
125
128
  "spec/ms/isotope/aa_spec.rb",
129
+ "spec/ms/isotope_spec.rb",
126
130
  "spec/ms/mass_spec.rb",
127
131
  "spec/ms/mzml/cv_spec.rb",
132
+ "spec/ms/mzml/data_array_spec.rb",
128
133
  "spec/ms/mzml/file_content_spec.rb",
129
134
  "spec/ms/mzml/file_description_spec.rb",
130
135
  "spec/ms/mzml/index_list_spec.rb",
@@ -142,7 +147,7 @@ Gem::Specification.new do |s|
142
147
  "spec/testfiles/ms/ident/peptide/db/uni_11_sp_tr.fasta",
143
148
  "spec/testfiles/ms/ident/peptide/db/uni_11_sp_tr.msd_clvg2.min_aaseq4.yml",
144
149
  "spec/testfiles/ms/mzml/j24z.idx_comp.3.mzML",
145
- "spec/testfiles/ms/mzml/mspire_simulated.noidx.check.mzML",
150
+ "spec/testfiles/ms/mzml/mspire_simulated.MSn.check.mzML",
146
151
  "spec/testfiles/ms/mzml/openms.noidx_nocomp.12.mzML",
147
152
  "spec/testfiles/ms/quant/kill_extra_tabs.rb",
148
153
  "spec/testfiles/ms/quant/max_quant_output.provenance.txt",
@@ -179,6 +184,8 @@ Gem::Specification.new do |s|
179
184
  s.add_runtime_dependency(%q<bsearch>, [">= 1.5.0"])
180
185
  s.add_runtime_dependency(%q<andand>, [">= 1.3.1"])
181
186
  s.add_runtime_dependency(%q<obo>, [">= 0.1.0"])
187
+ s.add_runtime_dependency(%q<builder>, [">= 3.0.0"])
188
+ s.add_runtime_dependency(%q<trollop>, [">= 1.16.2"])
182
189
  s.add_development_dependency(%q<rspec>, ["~> 2.6"])
183
190
  s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
184
191
  s.add_development_dependency(%q<rcov>, [">= 0"])
@@ -187,6 +194,8 @@ Gem::Specification.new do |s|
187
194
  s.add_dependency(%q<bsearch>, [">= 1.5.0"])
188
195
  s.add_dependency(%q<andand>, [">= 1.3.1"])
189
196
  s.add_dependency(%q<obo>, [">= 0.1.0"])
197
+ s.add_dependency(%q<builder>, [">= 3.0.0"])
198
+ s.add_dependency(%q<trollop>, [">= 1.16.2"])
190
199
  s.add_dependency(%q<rspec>, ["~> 2.6"])
191
200
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
192
201
  s.add_dependency(%q<rcov>, [">= 0"])
@@ -196,6 +205,8 @@ Gem::Specification.new do |s|
196
205
  s.add_dependency(%q<bsearch>, [">= 1.5.0"])
197
206
  s.add_dependency(%q<andand>, [">= 1.3.1"])
198
207
  s.add_dependency(%q<obo>, [">= 0.1.0"])
208
+ s.add_dependency(%q<builder>, [">= 3.0.0"])
209
+ s.add_dependency(%q<trollop>, [">= 1.16.2"])
199
210
  s.add_dependency(%q<rspec>, ["~> 2.6"])
200
211
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
201
212
  s.add_dependency(%q<rcov>, [">= 0"])
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'trollop'
4
+ require 'ms/mzml/data_array'
5
+
6
+ parser = Trollop::Parser.new do
7
+ banner "usage: #{File.basename(__FILE__)} [OPTIONS] <base64> ..."
8
+ banner "output: space separated data, one line per base64 string"
9
+ banner ""
10
+ opt :type, "kind of data (float32|float64|int8|int16|int32|int64)", :default => 'float64'
11
+ opt :not_compressed, "zlib compression was *not* used"
12
+ end
13
+
14
+ begin
15
+ opts = parser.parse(ARGV)
16
+ rescue help=Trollop::HelpNeeded
17
+ end
18
+
19
+ if help || ARGV.size == 0
20
+ parser.educate && exit
21
+ end
22
+
23
+ type = opts[:type].to_sym
24
+ compressed = !opts[:not_compressed]
25
+
26
+ ARGV.each do |base64|
27
+ puts MS::Mzml::DataArray.from_binary(base64, type, compressed).join(" ")
28
+ end
29
+
30
+
31
+
32
+
33
+
34
+
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ require 'ms/isotope'
4
+
5
+ describe 'MS::Isotope constants' do
6
+ it 'has all the common isotopes: MS::Isotope::ISOTOPES' do
7
+ # frozen
8
+ MS::Isotope::ISOTOPES.size.should == 288
9
+ hydrogen_isotopes = MS::Isotope::ISOTOPES.select {|iso| iso.element == :h }
10
+ hydrogen_isotopes.size.should == 2
11
+
12
+ { atomic_number: 1, element: :h, mass_number: 1, atomic_mass: 1.00782503207, relative_abundance: 0.999885, average_mass: 1.00794, mono: true }.each do |k,v|
13
+ hydrogen_isotopes.first.send(k).should == v
14
+ end
15
+ {atomic_number: 1, element: :h, mass_number: 2, atomic_mass: 2.0141017778, relative_abundance: 0.000115, average_mass: 1.00794, mono: false}.each do |k,v|
16
+ hydrogen_isotopes.last.send(k).should == v
17
+ end
18
+ u = MS::Isotope::ISOTOPES.last
19
+ {atomic_number: 92, element: :u, mass_number: 238, atomic_mass: 238.0507882, relative_abundance: 0.992742, average_mass: 238.02891, mono: true}.each do |k,v|
20
+ u.send(k).should == v
21
+ end
22
+ end
23
+ it 'has all common isotopes by element: MS::Isotope::BY_ELEMENT' do
24
+ [{atomic_number: 6, element: :c, mass_number: 12, atomic_mass: 12.0, relative_abundance: 0.9893, average_mass: 12.0107, mono: true}, {atomic_number: 6, element: :c, mass_number: 13, atomic_mass: 13.0033548378, relative_abundance: 0.0107, average_mass: 12.0107, mono: false}].zip(MS::Isotope::BY_ELEMENT[:c]) do |hash, iso|
25
+ hash.each do |k,v|
26
+ iso.send(k).should == v
27
+ end
28
+ end
29
+ MS::Isotope::BY_ELEMENT[:h].size.should == 2
30
+ end
31
+ end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ require 'ms/mzml/data_array'
4
+
5
+ describe MS::Mzml::DataArray do
6
+
7
+ it 'can be created from base64 binary data' do
8
+ d_ar = MS::Mzml::DataArray.from_binary('eJxjYACBD/YMEOAAoTgcABe3Abg=', :float64, zlib=true)
9
+ d_ar.is_a?(Array)
10
+ d_ar.should == [1.0, 2.0, 3.0]
11
+ d_ar = MS::Mzml::DataArray.from_binary('eJxjYACBD/YMEOAAoTgcABe3Abg=', ['MS:1000523', 'MS:1000574'])
12
+ d_ar.is_a?(Array)
13
+ d_ar.should == [1.0, 2.0, 3.0]
14
+ end
15
+
16
+ it "can be initialized like any ol' array" do
17
+ data = [1,2,3]
18
+ d_ar = MS::Mzml::DataArray.new( data )
19
+ d_ar.should == data
20
+ end
21
+
22
+ describe 'an instantiated MS::Mzml::DataArray' do
23
+ subject { MS::Mzml::DataArray.new [1,2,3] }
24
+
25
+ it "can have a 'type'" do
26
+ subject.type = :mz
27
+ subject.type.should == :mz
28
+ end
29
+
30
+ it 'can be converted to a binary string' do
31
+ string = subject.to_binary
32
+ # frozen
33
+ string.should == "eJxjYACBD/YMEOAAoTgcABe3Abg="
34
+ end
35
+
36
+ end
37
+
38
+ end
@@ -136,70 +136,13 @@ describe MS::Mzml do
136
136
  #check = TESTFILES + '/ms/mzml/mspire_simulated.noidx.check.mzML'
137
137
  tmpfile = TESTFILES + '/ms/mzml/mspire_simulated.MSn.TMP.mzML'
138
138
  mzml.to_xml(tmpfile)
139
- p tmpfile
140
- #xml = sanitize_version(IO.read(tmpfile))
141
- #xml.should be_a(String)
142
- #sanitize_version(mzml.to_xml).should == xml
143
- #xml.should == sanitize_version(IO.read(check))
144
- #xml.should match(/<mzML/)
145
- #File.unlink(tmpfile)
146
- end
147
-
148
-
149
- it 'writes MS1 spectra and retention times' do
139
+ as_string = mzml.to_xml
140
+ check_string = IO.read(TESTFILES + '/ms/mzml/mspire_simulated.MSn.check.mzML')
150
141
 
151
- spec_params = ['MS:1000127', ['MS:1000511', 1]]
152
-
153
- spec1 = MS::Mzml::Spectrum.new('scan=1', params: spec_params) do |spec|
154
- spec.data_arrays = [[1,2,3], [4,5,6]]
155
- spec.scan_list = MS::Mzml::ScanList.new do |sl|
156
- scan = MS::Mzml::Scan.new do |scan|
157
- # retention time of 42 seconds
158
- scan.describe! ['MS:1000016', 40.0, 'UO:0000010']
159
- end
160
- sl << scan
161
- end
162
- end
163
- spec2 = MS::Mzml::Spectrum.new('scan=2', params: spec_params) do |spec|
164
- spec.data_arrays = [[1,2,3.5], [5,6,5]]
165
- spec.scan_list = MS::Mzml::ScanList.new do |sl|
166
- scan = MS::Mzml::Scan.new do |scan|
167
- # retention time of 42 seconds
168
- scan.describe! ['MS:1000016', 45.0, 'UO:0000010']
169
- end
170
- sl << scan
171
- end
142
+ [IO.read(tmpfile), as_string].each do |st|
143
+ sanitize_version(check_string).should == sanitize_version(st)
172
144
  end
173
-
174
- mzml = MS::Mzml.new do |mzml|
175
- mzml.id = 'the_little_one'
176
- mzml.cvs = MS::Mzml::CV::DEFAULT_CVS
177
- mzml.file_description = MS::Mzml::FileDescription.new do |fd|
178
- fd.file_content = MS::Mzml::FileContent.new
179
- fd.source_files << MS::Mzml::SourceFile.new
180
- end
181
- default_instrument_config = MS::Mzml::InstrumentConfiguration.new("IC",[], params: ['MS:1000031'])
182
- mzml.instrument_configurations << default_instrument_config
183
- software = MS::Mzml::Software.new
184
- mzml.software_list << software
185
- default_data_processing = MS::Mzml::DataProcessing.new("did_nothing")
186
- mzml.data_processing_list << default_data_processing
187
- mzml.run = MS::Mzml::Run.new("little_run", default_instrument_config) do |run|
188
- spectrum_list = MS::Mzml::SpectrumList.new(default_data_processing)
189
- spectrum_list.push(spec1, spec2)
190
- run.spectrum_list = spectrum_list
191
- end
192
- end
193
-
194
- check = TESTFILES + '/ms/mzml/mspire_simulated.noidx.check.mzML'
195
- tmpfile = TESTFILES + '/ms/mzml/mspire_simulated.TMP.mzML'
196
- mzml.to_xml(tmpfile)
197
- xml = sanitize_version(IO.read(tmpfile))
198
- xml.should be_a(String)
199
- sanitize_version(mzml.to_xml).should == xml
200
- xml.should == sanitize_version(IO.read(check))
201
- xml.should match(/<mzML/)
202
- File.unlink(tmpfile)
145
+ File.unlink(tmpfile) if File.exist?(tmpfile)
203
146
  end
204
147
  end
205
148
  end
@@ -1,5 +1,5 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <mzML xmlns="http://psi.hupo.org/ms/mzml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="1.1.0" id="the_little_one">
2
+ <mzML xmlns="http://psi.hupo.org/ms/mzml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="1.1.0" id="ms1_and_ms2">
3
3
  <cvList count="3">
4
4
  <cv id="MS" fullName="Proteomics Standards Initiative Mass Spectrometry Ontology" URI="http://psidev.cvs.sourceforge.net/*checkout*/psidev/psi/psi-ms/mzML/controlledVocabulary/psi-ms.obo" version="3.18.0"/>
5
5
  <cv id="UO" fullName="Unit Ontology" URI="http://obo.cvs.sourceforge.net/*checkout*/obo/obo/ontology/phenotype/unit.obo" version="16:02:2012"/>
@@ -14,7 +14,7 @@
14
14
  </sourceFileList>
15
15
  </fileDescription>
16
16
  <softwareList count="1">
17
- <software id="mspire" version="0.6.7">
17
+ <software id="mspire" version="0.6.22">
18
18
  </software>
19
19
  </softwareList>
20
20
  <instrumentConfigurationList count="1">
@@ -31,7 +31,7 @@
31
31
  <run id="little_run" defaultInstrumentConfigurationRef="IC">
32
32
  <spectrumList count="2" defaultDataProcessingRef="did_nothing">
33
33
  <spectrum id="scan=1" index="0" defaultArrayLength="3">
34
- <cvParam cvRef="MS" accession="MS:1000127" name="centroid spectrum"/>
34
+ <cvParam cvRef="MS" accession="MS:1000128" name="profile spectrum"/>
35
35
  <cvParam cvRef="MS" accession="MS:1000511" name="ms level" value="1"/>
36
36
  <scanList count="1">
37
37
  <scan>
@@ -55,12 +55,22 @@
55
55
  </spectrum>
56
56
  <spectrum id="scan=2" index="1" defaultArrayLength="3">
57
57
  <cvParam cvRef="MS" accession="MS:1000127" name="centroid spectrum"/>
58
- <cvParam cvRef="MS" accession="MS:1000511" name="ms level" value="1"/>
58
+ <cvParam cvRef="MS" accession="MS:1000511" name="ms level" value="2"/>
59
+ <cvParam cvRef="MS" accession="MS:1000580" name="MSn spectrum"/>
59
60
  <scanList count="1">
60
61
  <scan>
61
62
  <cvParam cvRef="MS" accession="MS:1000016" name="scan start time" value="45.0" unitCvRef="UO" unitAccession="UO:0000010" unitName="second"/>
62
63
  </scan>
63
64
  </scanList>
65
+ <precursorList count="1">
66
+ <precursor spectrumRef="scan=1">
67
+ <selectedIonList count="1">
68
+ <cvParam cvRef="MS" accession="MS:1000744" name="selected ion m/z" value="2.0"/>
69
+ <cvParam cvRef="MS" accession="MS:1000041" name="charge state" value="2"/>
70
+ <cvParam cvRef="MS" accession="MS:1000042" name="peak intensity" value="5"/>
71
+ </selectedIonList>
72
+ </precursor>
73
+ </precursorList>
64
74
  <binaryDataArrayList count="2">
65
75
  <binaryDataArray encodedLength="28">
66
76
  <cvParam cvRef="MS" accession="MS:1000523" name="64-bit float"/>