mspire 0.8.1 → 0.8.2
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/mspire/cv/paramable.rb +25 -4
- data/lib/mspire/digester.rb +0 -16
- data/lib/mspire/imzml/writer.rb +1 -1
- data/lib/mspire/mzml/activation.rb +4 -0
- data/lib/mspire/mzml/chromatogram.rb +7 -3
- data/lib/mspire/mzml/component.rb +3 -1
- data/lib/mspire/mzml/data_array.rb +77 -87
- data/lib/mspire/mzml/data_array_container_like.rb +3 -8
- data/lib/mspire/mzml/isolation_window.rb +4 -0
- data/lib/mspire/mzml/precursor.rb +1 -1
- data/lib/mspire/mzml/reader.rb +3 -0
- data/lib/mspire/mzml/scan_window.rb +7 -0
- data/lib/mspire/mzml/selected_ion.rb +4 -0
- data/lib/mspire/mzml/spectrum.rb +18 -3
- data/lib/mspire/mzml.rb +2 -0
- data/lib/mspire/user_param.rb +13 -0
- data/spec/mspire/imzml/writer_spec.rb +17 -21
- data/spec/mspire/mzml/data_array_spec.rb +0 -5
- data/spec/mspire/mzml_spec.rb +56 -13
- data/spec/spec_helper.rb +22 -0
- data/spec/testfiles/mspire/{mzml → imzml}/1_BB7_SIM_478.5.CHECK.ibd +0 -0
- data/spec/testfiles/mspire/{mzml → imzml}/1_BB7_SIM_478.5.CHECK.imzML +144 -432
- data/spec/testfiles/mspire/imzml/{continuous_binary_check.ibd → continuous_binary.CHECK.ibd} +0 -0
- data/spec/testfiles/mspire/imzml/{processed_binary_check.ibd → processed_binary.CHECK.ibd} +0 -0
- data/spec/testfiles/mspire/mzml/j24z.idx_comp.3.NORMALIZED.CHECK.mzML +257 -0
- data/spec/testfiles/mspire/mzml/j24z.idx_comp.3.ROUNDTRIP.CHECK.mzML +257 -0
- data/spec/testfiles/mspire/mzml/{mspire_simulated.MSn.check.mzML → mspire_simulated.MSn.CHECK.mzML} +8 -6
- metadata +10 -8
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.8.
|
1
|
+
0.8.2
|
data/lib/mspire/cv/paramable.rb
CHANGED
@@ -25,10 +25,9 @@ module Mspire
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def params?
|
28
|
-
|
29
|
-
ref_param_groups.
|
30
|
-
|
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
|
data/lib/mspire/digester.rb
CHANGED
@@ -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)|
|
data/lib/mspire/imzml/writer.rb
CHANGED
@@ -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
|
@@ -49,9 +49,13 @@ module Mspire
|
|
49
49
|
data_arrays[1]
|
50
50
|
end
|
51
51
|
|
52
|
-
# see
|
53
|
-
def to_xml(builder,
|
54
|
-
atts = data_array_xml_atts
|
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
|
@@ -8,56 +8,43 @@ module Mspire
|
|
8
8
|
end
|
9
9
|
|
10
10
|
|
11
|
-
|
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
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
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
|
-
|
25
|
-
|
26
|
-
|
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
|
-
|
69
|
-
|
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
|
-
#
|
119
|
-
#
|
120
|
-
#
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
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
|
-
|
140
|
-
|
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
|
-
#
|
154
|
-
def
|
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 =
|
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.
|
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
|
42
|
-
|
43
|
-
|
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
|
@@ -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
|
data/lib/mspire/mzml/reader.rb
CHANGED
@@ -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
|
data/lib/mspire/mzml/spectrum.rb
CHANGED
@@ -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
|
-
|
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
|
data/lib/mspire/user_param.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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(
|
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
|
-
|
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
|
-
|
117
|
-
|
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
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
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
|