mspire 0.8.1 → 0.8.2

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.8.1
1
+ 0.8.2
@@ -25,10 +25,9 @@ module Mspire
25
25
  end
26
26
 
27
27
  def params?
28
- total_num_params = cv_params.size +
29
- ref_param_groups.reduce(0) {|sum,group| sum +
30
- group.params.size } + user_params.size
31
- total_num_params > 0
28
+ cv_params.size > 0 ||
29
+ ref_param_groups.any? {|group| group.params.size > 0 } ||
30
+ user_params.size > 0
32
31
  end
33
32
 
34
33
  def each_accessionable_param(&block)
@@ -42,6 +41,25 @@ module Mspire
42
41
  cv_params + ref_param_groups.flat_map(&:params)
43
42
  end
44
43
 
44
+ # yields each current param. If the return value is not false or nil,
45
+ # it is deleted (i.e., any true value and it is deleted). Then adds the
46
+ # given parameter or makes a new one by accession number.
47
+ def replace!(*describe_args, &block)
48
+ reject!(&block).describe!(*describe_args)
49
+ end
50
+
51
+ # returns self
52
+ def reject!(&block)
53
+ cv_params.reject!(&block)
54
+ ref_param_groups.each {|group| group.reject!(&block) }
55
+ user_params.reject!(&block)
56
+ self
57
+ end
58
+
59
+ def replace_many!(describe_many_arg, &block)
60
+ reject!(&block).describe_many!(describe_many_arg)
61
+ end
62
+
45
63
  #def params_by_name
46
64
  # params.index_by &:name
47
65
  #end
@@ -61,6 +79,9 @@ module Mspire
61
79
  end
62
80
  end
63
81
 
82
+ # returns the value if the param exists with that accession. Returns
83
+ # true if the param exists but has no value. returns false if no param
84
+ # with that accession.
64
85
  def fetch_by_accession(acc)
65
86
  param = accessionable_params.find {|v| v.accession == acc }
66
87
  if param
@@ -219,22 +219,6 @@ module Mspire
219
219
  :trypsin => 'Trypsin C-Term KR P no no',
220
220
  :v8_e_trypsin => 'V8-E+Trypsin C-Term EKRZ P no no',
221
221
  :v8_de_trypsin => 'V8-DE+Trypsin C-Term BDEKRZ P no no',
222
- :arg_c => 'Arg-C C-Term R P no no',
223
- :asp_n => 'Asp-N N-Term BD no no',
224
- :asp_n_ambic => 'Asp-N_ambic N-Term DE no no',
225
- :chymotrypsin => 'Chymotrypsin C-Term FLWY P no no',
226
- :cnbr => 'CNBr C-Term M no no',
227
- :lys_c => 'Lys-C C-Term K P no no',
228
- :lys_c_p => 'Lys-C/P C-Term K no no',
229
- :pepsin_a => 'PepsinA C-Term FL no no',
230
- :tryp_cnbr => 'Tryp-CNBr C-Term KMR P no no',
231
- :tryp_chymo => 'TrypChymo C-Term FKLRWY P no no',
232
- :trypsin_p => 'Trypsin/P C-Term KR no no',
233
- :v8_de => 'V8-DE C-Term BDEZ P no no',
234
- :v8_e => 'V8-E C-Term EZ P no no',
235
- :trypsin => 'Trypsin C-Term KR P no no',
236
- :v8_e_trypsin => 'V8-E+Trypsin C-Term EKRZ P no no',
237
- :v8_de_trypsin => 'V8-DE+Trypsin C-Term BDEKRZ P no no',
238
222
  }
239
223
 
240
224
  ENZYMES = MASCOT_ENZYME_CONFIG_STRINGS.inject(Hash.new) do |hash,(k,v)|
@@ -422,8 +422,8 @@ module Mspire::Imzml
422
422
 
423
423
  data_arrays = %w(mz intensity).zip(pair).map do |type, data_array_info|
424
424
  rparmgroup = rparms_by_id[(type + "_array").to_sym]
425
+ # the type is defined in the refparams
425
426
  data_array = Mspire::Mzml::DataArray.new
426
- data_array.type = type
427
427
  data_array.external = true
428
428
  data_array.describe_many! [rparmgroup, *%w(IMS:1000103 IMS:1000102 IMS:1000104).zip(data_array_info).map.to_a]
429
429
  data_array
@@ -28,6 +28,10 @@ module Mspire
28
28
  # et al.
29
29
  class Activation
30
30
  include Mspire::CV::Paramable
31
+
32
+ def to_xml(builder)
33
+ builder.activation {|xml| super(xml) }
34
+ end
31
35
  end
32
36
  end
33
37
  end
@@ -49,9 +49,13 @@ module Mspire
49
49
  data_arrays[1]
50
50
  end
51
51
 
52
- # see SpectrumList for generating the entire list
53
- def to_xml(builder, opts={})
54
- atts = data_array_xml_atts(default_ids)
52
+ # see ChromatogramList for generating the entire list
53
+ def to_xml(builder, default_ids)
54
+ atts = data_array_xml_atts
55
+ if @data_processing && default_ids[:chromatogram_data_processing] != @data_processing.id
56
+ atts[:dataProcessingRef] = @data_processing.id
57
+ end
58
+
55
59
  builder.chromatogram(atts) do |chrom_n|
56
60
  super(chrom_n)
57
61
  @precursor.to_xml(chrom_n) if @precursor
@@ -14,7 +14,9 @@ module Mspire
14
14
  end
15
15
 
16
16
  def to_xml(builder, order)
17
- builder.component(order: order) do |c_n|
17
+ klass = self.class.to_s.split('::').last
18
+ klass[0] = klass[0].downcase
19
+ builder.tag!(klass, order: order) do |c_n|
18
20
  super(c_n)
19
21
  end
20
22
  builder
@@ -8,56 +8,43 @@ module Mspire
8
8
  end
9
9
 
10
10
 
11
- class Mspire::Mzml::DataArray < Array
11
+ # Mspire::Mzml::DataArray's are currently implemented as a standard Ruby
12
+ # array. Data may be input or output with less precision, but a standard data
13
+ # array will be accessible from ruby as Float (float64). Thus, the params
14
+ # merely alter what will be output to xml, so, to alter what is written with
15
+ # to_xml, change the params. If no params are changed in the data array it
16
+ # will be written with the same precision as it was read in with.
17
+ class Mspire::Mzml::DataArray < Array
12
18
  alias_method :array_init, :initialize
13
19
  include Mspire::CV::Paramable
14
20
 
15
- DEFAULT_DTYPE = :float64
16
- DEFAULT_COMPRESSION = true
17
- DTYPE_TO_ACC = {
18
- float64: 'MS:1000523',
19
- float32: 'MS:1000521',
20
- # float16: 'MS:1000520', # <- not supported w/o other gems
21
- int64: 'MS:1000522', # signed
22
- int32: 'MS:1000519', # signed
21
+ DEFAULT_DTYPE_ACC = 'MS:1000523' # float64
22
+ DEFAULT_COMPRESSION_ACC = 'MS:1000574'
23
+ COMPRESSION_ACC = 'MS:1000574'
24
+ NO_COMPRESSION_ACC = 'MS:1000576'
25
+ ACC_TO_DTYPE = {
26
+ 'MS:1000523' => :float64,
27
+ 'MS:1000521' => :float32,
28
+ #'MS:1000520' => :float16, # <- not supported w/o other gems
29
+ 'MS:1000522' => :int64, # signed
30
+ 'MS:1000519' => :int32, # signed
23
31
  }
24
- TYPE_XML = {
25
- mz: '<cvParam cvRef="MS" accession="MS:1000514" name="m/z array"/>',
26
- intensity: '<cvParam cvRef="MS" accession="MS:1000515" name="intensity array"/>'
32
+ ACC_TO_UNPACK_CODE = {
33
+ 'MS:1000523' => 'E*',
34
+ 'MS:1000521' => 'e*',
35
+ #'MS:1000520' => :float16, # <- not supported w/o other gems
36
+ 'MS:1000522' => 'q<*',
37
+ 'MS:1000519' => 'l<*',
27
38
  }
28
39
 
40
+ DTYPE_ACCS = ACC_TO_DTYPE.keys
41
+
42
+ # unless data type (see DTYPE_TO_ACC) or TYPE
29
43
  def initialize(*args)
30
44
  params_init # paramable
31
45
  array_init(*args)
32
46
  end
33
47
 
34
- # takes :mz or :intensity and sets the proper param among cvParams. Does not do
35
- # referenceableParamGroup resolution.
36
- def type=(symbol)
37
- new_cv_params = []
38
- already_present = false
39
- cvs = ['MS:1000514', 'MS:1000515']
40
- cvs.reverse! if symbol == :intensity
41
- (keep, remove) = cvs
42
-
43
- @cv_params.each do |param|
44
- new_cv_params << param unless param.accession == remove
45
- (already_present = true) if (param.accession == keep)
46
- end
47
- new_cv_params.push(Mspire::CV::Param[keep]) unless already_present
48
- @cv_params = new_cv_params
49
- symbol
50
- end
51
-
52
- # :mz or :intensity (or nil if none found)
53
- def type
54
- each_accessionable_param do |param|
55
- return :mz if (param.accession == 'MS:1000514')
56
- return :intensity if (param.accession == 'MS:1000515')
57
- end
58
- nil
59
- end
60
-
61
48
  # (optional) the DataProcessing object associated with this DataArray
62
49
  attr_accessor :data_processing
63
50
 
@@ -65,8 +52,19 @@ class Mspire::Mzml::DataArray < Array
65
52
  # file for imzML files)
66
53
  attr_accessor :external
67
54
 
68
- def self.empty_data_arrays
69
- [self.new, self.new]
55
+ # returns a DataArray object. Analogous to [] for creating an array.
56
+ def self.[](*data)
57
+ self.new(data)
58
+ end
59
+
60
+ # returns an array of DataArray objects based on the given arrays
61
+ def self.from_arrays(arrays)
62
+ arrays.map {|ar| self.new(ar) }
63
+ end
64
+
65
+ # returns an array of DataArray objects (2)
66
+ def self.empty_data_arrays(num=2)
67
+ Array.new(num) { self.new }
70
68
  end
71
69
 
72
70
  def self.data_arrays_from_xml(xml, link)
@@ -115,74 +113,66 @@ class Mspire::Mzml::DataArray < Array
115
113
  da
116
114
  end
117
115
 
118
- # returns a base64 string that can be used for xml representations of
119
- # the data
120
- #
121
- # args:
122
- # array-like set-like # where set-like responds to include?
123
- # array-like dtype=:float64, compression=true
124
- def self.to_binary(array_ish, *args)
125
- if args.first.respond_to?(:include?)
126
- accessions = args.first
127
- dtype =
128
- if accessions.include?('MS:1000521')
129
- :float32
130
- else
131
- :float64
116
+ # creates a base64 binary string based on the objects params. If no dtype
117
+ # or compression are specified, then it will be set (i.e., params added to
118
+ # the object).
119
+ def to_binary
120
+ # single pass over params for speed
121
+ pack_code = nil
122
+ compression = nil
123
+ each_accessionable_param do |param|
124
+ acc = param.accession
125
+ if !pack_code && (code=ACC_TO_UNPACK_CODE[acc])
126
+ pack_code = code
127
+ end
128
+ if compression.nil?
129
+ compression =
130
+ case acc
131
+ when COMPRESSION_ACC then true
132
+ when NO_COMPRESSION_ACC then false
133
+ end
134
+ end
135
+ end
136
+ # can speed these up:
137
+ unless pack_code
138
+ describe! DEFAULT_DTYPE_ACC
139
+ pack_code = ACC_TO_UNPACK_CODE[DEFAULT_DTYPE_ACC]
140
+ end
141
+ if compression.nil?
142
+ describe! DEFAULT_COMPRESSION_ACC
143
+ compression =
144
+ case DEFAULT_COMPRESSION_ACC
145
+ when COMPRESSION_ACC then true
146
+ when NO_COMPRESSION_ACC then false
132
147
  end
133
- compression = accessions.include?('MS:1000576') ? false : true
134
- else
135
- dtype = args[0] || DEFAULT_DTYPE
136
- compression = args[1] || DEFAULT_COMPRESSION
137
148
  end
138
149
 
139
- pack_code =
140
- case dtype
141
- when :float64 ; 'E*'
142
- when :float32 ; 'e*'
143
- when :int64 ; 'q<*'
144
- when :int32 ; 'l<*'
145
- else ; raise "unsupported dtype: #{dtype}"
146
- end
147
- # TODO: support faster pack method for NArray's in future
148
- string = array_ish.to_a.pack(pack_code)
150
+ # TODO: support faster pack method with nmatrix or narray
151
+ string = self.pack(pack_code)
149
152
  string = Zlib::Deflate.deflate(string) if compression
150
153
  Base64.strict_encode64(string)
151
154
  end
152
155
 
153
- # calls the class to_binary method with self and the given args
154
- def to_binary(*args)
155
- self.class.to_binary(self, *args)
156
- end
157
-
158
- def to_xml(builder, dtype=DEFAULT_DTYPE, compression=DEFAULT_COMPRESSION)
156
+ # will set the data type to DEFAULT_DTYPE and compression if n
157
+ def to_xml(builder)
159
158
  encoded_length =
160
159
  if @external
161
160
  0
162
161
  else
163
- base64 = self.class.to_binary(self, dtype, compression)
162
+ base64 = to_binary
164
163
  base64.bytesize
165
164
  end
166
165
 
167
166
  builder.binaryDataArray(encodedLength: encoded_length) do |bda_n|
168
167
  super(bda_n)
169
- unless self.external
170
- # can significantly speed up the below 2 lines:
171
- Mspire::CV::Param[ DTYPE_TO_ACC[dtype] ].to_xml(bda_n)
172
- Mspire::CV::Param[ compression ? 'MS:1000574' : 'MS:1000576' ].to_xml(bda_n)
173
- bda_n.binary(base64)
174
- end
168
+ bda_n.binary(base64) unless self.external
175
169
  end
176
170
  end
177
171
 
178
172
  # takes an array of DataArray objects or other kinds of objects
179
173
  def self.list_xml(arrays, builder)
180
174
  builder.binaryDataArrayList(count: arrays.size) do |bdal_n|
181
- arrays.zip([:mz, :intensity]) do |data_ar, typ|
182
- ar =
183
- if data_ar.is_a?(Mspire::Mzml::DataArray) then data_ar
184
- else Mspire::Mzml::DataArray.new(data_ar) end
185
- ar.type = typ unless ar.type
175
+ arrays.each do |ar|
186
176
  ar.to_xml(bdal_n)
187
177
  end
188
178
  end
@@ -38,14 +38,9 @@ module Mspire
38
38
  end
39
39
  end
40
40
 
41
- # returns a hash with id, index, defaultArrayLength and the proper
42
- # dataProcessing attributes filled out.
43
- def data_array_xml_atts(default_ids)
44
- atts = {id: @id, index: @index, defaultArrayLength: default_array_length}
45
- if @data_processing && default_ids[:data_processing] != @data_processing.id
46
- atts[:dataProcessingRef] = @data_processing.id
47
- end
48
- atts
41
+ # returns a hash with id, index, defaultArrayLength
42
+ def data_array_xml_atts
43
+ {index: @index, id: @id, defaultArrayLength: default_array_length}
49
44
  end
50
45
 
51
46
  end
@@ -16,6 +16,10 @@ module Mspire
16
16
  # e.g.: MS:1000829 (isolation window upper offset)
17
17
  class IsolationWindow
18
18
  include Mspire::CV::Paramable
19
+
20
+ def to_xml(builder)
21
+ builder.isolationWindow {|xml| super(xml) }
22
+ end
19
23
  end
20
24
  end
21
25
  end
@@ -7,6 +7,7 @@ module Mspire
7
7
  class Mzml
8
8
  # The method of precursor ion selection and activation
9
9
  class Precursor
10
+ extend Mspire::Mzml::List
10
11
 
11
12
  # (optional) the id of the Spectrum object, whether internal or
12
13
  # externally derived.
@@ -77,7 +78,6 @@ module Mspire
77
78
  end
78
79
  end
79
80
 
80
- extend(Mspire::Mzml::List)
81
81
 
82
82
  end
83
83
  end
@@ -83,6 +83,9 @@ module Mspire::Mzml::Reader
83
83
  if mzml_n.name == 'indexedmzML'
84
84
  mzml_n = mzml_n.child
85
85
  end
86
+
87
+ @id = mzml_n[:id]
88
+
86
89
  cv_list_n = mzml_n.child
87
90
  self.cvs = cv_list_n.children.map do |cv_n|
88
91
  Mspire::Mzml::CV.from_xml(cv_n)
@@ -8,6 +8,13 @@ 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
+ extend Mspire::Mzml::List
12
+
13
+ def to_xml(builder)
14
+ builder.scanWindow do |xml|
15
+ super(xml)
16
+ end
17
+ end
11
18
  end
12
19
  end
13
20
  end
@@ -12,6 +12,10 @@ module Mspire
12
12
  class SelectedIon
13
13
  include Mspire::CV::Paramable
14
14
  extend Mspire::Mzml::List
15
+
16
+ def to_xml(builder)
17
+ builder.selectedIon {|xml| super(xml) }
18
+ end
15
19
  end
16
20
  end
17
21
  end
@@ -155,8 +155,6 @@ module Mspire
155
155
  obj.data_arrays = Mspire::Mzml::DataArray.empty_data_arrays
156
156
  end
157
157
 
158
-
159
-
160
158
  obj
161
159
  end
162
160
 
@@ -172,9 +170,25 @@ module Mspire
172
170
  yield(self) if block_given?
173
171
  end
174
172
 
173
+ # sets the data_arrays from the given array objects. Sets the type of
174
+ # the first array to be an m/z array, and the second to be an intensity
175
+ # array.
176
+ def self.from_arrays(id, arrays)
177
+ spec = self.new(id)
178
+ arrays.zip(['MS:1000514','MS:1000515']).each do |ar, acc|
179
+ dar = DataArray.new(ar).describe!(acc)
180
+ end
181
+ spec
182
+ end
183
+
175
184
  # see SpectrumList for generating the entire list
176
185
  def to_xml(builder, default_ids)
177
- atts = data_array_xml_atts(default_ids)
186
+ io = builder.target!
187
+
188
+ atts = data_array_xml_atts
189
+ if @data_processing && default_ids[:spectrum_data_processing] != @data_processing.id
190
+ atts[:dataProcessingRef] = @data_processing.id
191
+ end
178
192
  atts[:sourceFileRef] = @source_file.id if @source_file
179
193
  atts[:spotID] = @spot_id if @spot_id
180
194
 
@@ -185,6 +199,7 @@ module Mspire
185
199
  Mspire::Mzml::Product.list_xml(@products, sp_n) if @products
186
200
  Mspire::Mzml::DataArray.list_xml(@data_arrays, sp_n) if @data_arrays
187
201
  end
202
+ builder
188
203
  end
189
204
 
190
205
  end
data/lib/mspire/mzml.rb CHANGED
@@ -85,6 +85,7 @@ module Mspire
85
85
  :xmlns => "http://psi.hupo.org/ms/mzml",
86
86
  "xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance",
87
87
  "xmlns:xsd" => "http://www.w3.org/2001/XMLSchema",
88
+ "xsi:schemaLocation" => "http://psi.hupo.org/ms/mzml http://psidev.info/files/ms/mzML/xsd/mzML1.1.0.xsd"
88
89
  }
89
90
 
90
91
  VERSION = '1.1.0'
@@ -255,6 +256,7 @@ module Mspire
255
256
  io.string
256
257
  end
257
258
  end
259
+ alias_method :write, :to_xml
258
260
 
259
261
  class ScanNumbersNotUnique < Exception
260
262
  end
@@ -25,5 +25,18 @@ module Mspire
25
25
  self.name, self.value, self.type = args
26
26
  end
27
27
 
28
+ def to_xml(xml)
29
+ atts = { name: name, value: value, type: type }
30
+ if unit
31
+ atts.merge!(
32
+ { :unitCvRef => unit.cv_ref,
33
+ :unitAccession => unit.accession,
34
+ :unitName => unit.name }
35
+ )
36
+ end
37
+ xml.userParam(atts)
38
+ xml
39
+ end
40
+
28
41
  end
29
42
  end
@@ -54,10 +54,10 @@ describe Mspire::Imzml::Writer do
54
54
  end
55
55
 
56
56
  it 'writes :processed binary file with spectra and returns DataArrayInfo objects' do
57
- expected_file = TESTFILES + "/mspire/imzml/processed_binary_check.ibd"
58
- write_to = TESTFILES + "/mspire/imzml/processed_binary.tmp.ibd"
57
+ write_to = TESTFILES + "/mspire/imzml/processed_binary.ibd"
59
58
  array = subject.write_binary(write_to, @spectra.each, @config.merge( {:data_structure => :processed} ))
60
- IO.read(write_to).should == IO.read(expected_file)
59
+ file_check(write_to)
60
+
61
61
  array.should be_an(Array)
62
62
  length = 3
63
63
  offsets = (16..76).step(12)
@@ -71,14 +71,12 @@ describe Mspire::Imzml::Writer do
71
71
  obj.offset.should == offsets.next
72
72
  end
73
73
  end
74
- File.unlink(write_to) if File.exist?(write_to)
75
74
  end
76
75
 
77
76
  it 'writes :continuous binary file with spectra and returns DataArrayInfo objects' do
78
- expected_file = TESTFILES + "/mspire/imzml/continuous_binary_check.ibd"
79
- write_to = TESTFILES + "/mspire/imzml/continuous_binary.tmp.ibd"
77
+ write_to = TESTFILES + "/mspire/imzml/continuous_binary.ibd"
80
78
  array = subject.write_binary(write_to, @spectra.each, @config.merge( {:data_structure => :continuous} ))
81
- IO.read(write_to).should == IO.read(expected_file)
79
+ file_check(write_to)
82
80
  array.should be_an(Array)
83
81
 
84
82
  length = 3
@@ -95,7 +93,6 @@ describe Mspire::Imzml::Writer do
95
93
  info_pair.first.offset.should == first_offset
96
94
  info_pair.last.offset.should == offsets.next
97
95
  end
98
- File.unlink(write_to) if File.exist?(write_to)
99
96
  end
100
97
 
101
98
  describe 'full conversion of a file' do
@@ -105,25 +102,24 @@ describe Mspire::Imzml::Writer do
105
102
  end
106
103
 
107
104
  # reads file and removes parts that change run to run
108
- def sanitize(file)
105
+ def sanitize(string)
106
+ string = sanitize_mspire_version_xml(string)
109
107
  reject = ['xmlns="http://psi.hupo.org/ms/mzml', 'universally unique identifier', 'ibd SHA-1']
110
- IO.readlines(file).reject do |line|
108
+ string.split(/\r?\n/).reject do |line|
111
109
  reject.any? {|fragment| line.include?(fragment) }
112
- end.join
110
+ end.join("\n")
113
111
  end
114
112
 
115
113
  it 'converts sim files' do
116
- Mspire::Imzml::Writer::Commandline.run([@file, @file, "--max-dimensions-microns", "72x2", "--max-dimensions-pixels", "72x2"])
117
- # checking ibd is hard, reserved for above specs
118
- imzml_check = TESTFILES + "/mspire/mzml/1_BB7_SIM_478.5.CHECK.imzML"
119
- ibd_check = TESTFILES + "/mspire/mzml/1_BB7_SIM_478.5.CHECK.ibd"
114
+ outbase = TESTFILES + "/mspire/imzml/1_BB7_SIM_478.5"
115
+ Mspire::Imzml::Writer::Commandline.run([@file, @file, "--max-dimensions-microns", "72x2", "--max-dimensions-pixels", "72x2", "--outfile", outbase])
120
116
  # really just frozen for now until I inspect it more critically
121
- imzml = imzml_check.sub('.CHECK','')
122
- ibd = ibd_check.sub('.CHECK','')
123
- File.exist?(ibd).should be_true
124
- File.exist?(imzml).should be_true
125
- sanitize(imzml_check).should == sanitize(imzml)
126
- File.unlink(ibd) ; File.unlink(imzml)
117
+ file_check( TESTFILES + "/mspire/imzml/1_BB7_SIM_478.5.imzML" ) do |st|
118
+ sanitize(st)
119
+ end
120
+ file_check( TESTFILES + "/mspire/imzml/1_BB7_SIM_478.5.ibd" ) do |st|
121
+ st.each_byte.map.to_a[20..-1]
122
+ end
127
123
  end
128
124
  end
129
125
 
@@ -35,11 +35,6 @@ describe Mspire::Mzml::DataArray do
35
35
  describe 'an instantiated Mspire::Mzml::DataArray' do
36
36
  subject { Mspire::Mzml::DataArray.new [1,2,3] }
37
37
 
38
- it "can have a 'type'" do
39
- subject.type = :mz
40
- subject.type.should == :mz
41
- end
42
-
43
38
  it 'can be converted to a binary string' do
44
39
  string = subject.to_binary
45
40
  # frozen