mspire 0.7.12 → 0.7.13

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.7.12
1
+ 0.7.13
data/lib/mspire.rb CHANGED
@@ -1,5 +1,5 @@
1
1
 
2
- require 'mspire/mass/aa' # requires mspire/mass
2
+ require 'mspire/mass/aa' # requires mspire/mass & therefore mspire/molecular_formula
3
3
 
4
4
  module Mspire
5
5
  VERSION = IO.read(File.join(File.dirname(__FILE__), '..', 'VERSION')).chomp
@@ -1,10 +1,5 @@
1
1
  require 'mspire/molecular_formula'
2
2
 
3
- module Mspire
4
- class MolecularFormula < Hash
5
- end
6
- end
7
-
8
3
 
9
4
  module Mspire
10
5
  class Isotope
@@ -1,5 +1,4 @@
1
1
  require 'mspire/isotope'
2
- require 'mspire/isotope/aa'
3
2
  require 'mspire/mass'
4
3
 
5
4
  module Mspire
@@ -66,3 +65,5 @@ module Mspire
66
65
 
67
66
  end
68
67
  end
68
+
69
+ require 'mspire/isotope/aa'
@@ -2,9 +2,9 @@ require 'mspire/bin'
2
2
  require 'mspire/peak'
3
3
 
4
4
  module Mspire
5
- # a collection of peak objects. At a minimum, each peak should respond to
5
+ # a collection of Peak objects. At a minimum, each peak should respond to
6
6
  # :x and :y
7
- class PeakList < Array
7
+ class Peaklist < Array
8
8
 
9
9
  def lo_x
10
10
  self.first[0]
@@ -38,7 +38,7 @@ module Mspire
38
38
  # class methods
39
39
  class << self
40
40
 
41
- # creates a new Mspire::PeakList and coerces each peak into an
41
+ # creates a new Mspire::Peaklist and coerces each peak into an
42
42
  # Mspire::Peak. If your peaks already behave like peaks you should use
43
43
  # .new
44
44
  def [](*peaks)
@@ -98,17 +98,17 @@ module Mspire
98
98
  Mspire::Peak.new( [bin, bin.data.reduce(0.0) {|sum,peak| sum + peak.y }] )
99
99
  end
100
100
 
101
- pseudo_peaklist = Mspire::PeakList.new(pseudo_peaks)
101
+ pseudo_peaklist = Mspire::Peaklist.new(pseudo_peaks)
102
102
 
103
103
  separate_peaklists = pseudo_peaklist.split(opts[:split])
104
104
 
105
105
  normalize_factor = opts[:normalize] ? peaklists.size : 1
106
106
 
107
107
  return_data = []
108
- final_peaklist = Mspire::PeakList.new unless opts[:only_data]
108
+ final_peaklist = Mspire::Peaklist.new unless opts[:only_data]
109
109
 
110
110
  separate_peaklists.each do |pseudo_peaklist|
111
- data_peaklist = Mspire::PeakList.new
111
+ data_peaklist = Mspire::Peaklist.new
112
112
  weight_x = 0.0
113
113
  tot_intensity = pseudo_peaklist.inject(0.0) {|sum, bin_peak| sum + bin_peak.y }
114
114
  #puts "TOT INTENSITY:"
@@ -144,7 +144,7 @@ module Mspire
144
144
  [final_peaklist, return_data]
145
145
  end
146
146
 
147
- # returns a new peak_list which has been merged with the others.
147
+ # returns a new peaklist which has been merged with the others.
148
148
  # opts[:resolution]) and then segment according to monotonicity (sharing
149
149
  # intensity between abutting points). The final m/z is the weighted
150
150
  # averaged of all the m/z's in each peak. Valid opts (with default listed
@@ -157,6 +157,7 @@ module Mspire
157
157
  # number of spectra
158
158
  # :return_data => false returns a parallel array containing
159
159
  # the peaks associated with each returned peak
160
+ # :only_data => false only returns the binned peaks
160
161
  # :split => :zero|:greedy_y|:share see Mspire::Peak#split
161
162
  # :centroided => true treat the data as centroided
162
163
  #
@@ -186,8 +187,42 @@ module Mspire
186
187
  peaklist
187
188
  end
188
189
  end
189
- end # end class << self
190
190
 
191
+ # takes an array of peaklists, merges them together (like merge), then
192
+ # returns an array of doublets. Each doublet is an m/z and an array of
193
+ # values (parallel to input) of intensities]
194
+ #
195
+ # If you are already using tagged peak objects, then you should set
196
+ # have_tagged_peaks to false (default is true). The peaks will be
197
+ # deconvolved based on the sample_id in this case.
198
+ #
199
+ # :have_tagged_peaks => false|true
200
+ #
201
+ def merge_and_deconvolve(peaklists, opts={})
202
+ unless htp=opts.delete(:have_tagged_peaks)
203
+ peaklists.each_with_index do |peaklist,i|
204
+ peaklist.map! do |peak|
205
+ TaggedPeak.new(peak, i)
206
+ end
207
+ end
208
+ end
209
+
210
+ # make sure we get the data back out
211
+ opts[:return_data] = true
212
+ opts[:only_data] = false
213
+
214
+ sample_ids = peaklists.map {|pl| pl.first.sample_id }
215
+ peaks, data = merge(peaklists, opts)
216
+ data.zip(peaks).map do |bucket_of_peaks, meta_peak|
217
+ signal_by_sample_id = Hash.new {|h,k| h[k] = 0.0 }
218
+ bucket_of_peaks.each do |peak|
219
+ signal_by_sample_id[peak.sample_id] += peak.y
220
+ end
221
+ [meta_peak.x, sample_ids.map {|sample_id| signal_by_sample_id[sample_id] } ]
222
+ end
223
+ end
224
+
225
+ end # end class << self
191
226
 
192
227
  # returns an array with the indices outlining each peak. The first index
193
228
  # is the start of the peak, the last index is the last of the peak.
@@ -230,7 +265,7 @@ module Mspire
230
265
  peak_inds
231
266
  end
232
267
 
233
- # returns an array of PeakList objects
268
+ # returns an array of Peaklist objects
234
269
  def split_on_zeros(given_peak_boundaries=nil)
235
270
  pk_bounds = given_peak_boundaries || peak_boundaries(0.0)
236
271
  pk_bounds.map do |indices|
@@ -238,7 +273,7 @@ module Mspire
238
273
  end
239
274
  end
240
275
 
241
- # returns an array of PeakList objects
276
+ # returns an array of Peaklist objects
242
277
  # assumes that this is one connected list of peaks (i.e., no
243
278
  # zeros/whitespace on the edges or internally)
244
279
  #
@@ -255,31 +290,31 @@ module Mspire
255
290
  else
256
291
  peak_class = first.class
257
292
  prev_lm_i = 0 # <- don't worry, will be set to bumped to zero
258
- peak_lists = [ self.class.new([self[0]]) ]
293
+ peaklists = [ self.class.new([self[0]]) ]
259
294
  local_min_indices.each do |lm_i|
260
- peak_lists.last.push( *self[(prev_lm_i+1)..(lm_i-1)] )
295
+ peaklists.last.push( *self[(prev_lm_i+1)..(lm_i-1)] )
261
296
  case methd
262
297
  when :greedy_y
263
298
  if self[lm_i-1].y >= self[lm_i+1].y
264
- peak_lists.last << self[lm_i]
265
- peak_lists << self.class.new
299
+ peaklists.last << self[lm_i]
300
+ peaklists << self.class.new
266
301
  else
267
- peak_lists << self.class.new( [self[lm_i]] )
302
+ peaklists << self.class.new( [self[lm_i]] )
268
303
  end
269
304
  when :share
270
305
  # for each local min, two new peaks will be created, with
271
- # intensity shared between adjacent peak_lists
306
+ # intensity shared between adjacent peaklists
272
307
  lm = self[lm_i]
273
308
  sum = self[lm_i-1].y + self[lm_i+1].y
274
309
  # push onto the last peaklist its portion of the local min
275
- peak_lists.last << peak_class.new( [lm.x, lm.y * (self[lm_i-1].y.to_f/sum)] )
310
+ peaklists.last << peak_class.new( [lm.x, lm.y * (self[lm_i-1].y.to_f/sum)] )
276
311
  # create a new peaklist that contains its portion of the local min
277
- peak_lists << self.class.new( [peak_class.new([lm.x, lm.y * (self[lm_i+1].y.to_f/sum)])] )
312
+ peaklists << self.class.new( [peak_class.new([lm.x, lm.y * (self[lm_i+1].y.to_f/sum)])] )
278
313
  end
279
314
  prev_lm_i = lm_i
280
315
  end
281
- peak_lists.last.push(*self[(prev_lm_i+1)...(self.size)] )
282
- peak_lists
316
+ peaklists.last.push(*self[(prev_lm_i+1)...(self.size)] )
317
+ peaklists
283
318
  end
284
319
  end
285
320
 
@@ -310,7 +345,7 @@ module Mspire
310
345
  if indices.size == 2
311
346
  no_lm_pklsts << peak
312
347
  else # have local minima
313
- multipeak = PeakList.new(peak)
348
+ multipeak = Peaklist.new(peak)
314
349
  local_min_inds = indices[1..-2].map {|i| i-indices.first}
315
350
  peaklists = multipeak.split_contiguous(split_multipeaks_mthd, local_min_inds)
316
351
  no_lm_pklsts.push *peaklists
@@ -64,7 +64,9 @@ module Mspire
64
64
  [@data_arrays[0][array_index], @data_arrays[1][array_index]]
65
65
  end
66
66
 
67
- # yields(mz, inten) across the spectrum, or array of doublets if no block
67
+ # yields(mz, inten) across the spectrum, or array of doublets if no block.
68
+ # Note that each peak is merely an array of m/z and intensity. For a
69
+ # genuine
68
70
  def peaks(&block)
69
71
  @data_arrays[0].zip(@data_arrays[1], &block)
70
72
  end
@@ -72,6 +74,25 @@ module Mspire
72
74
  alias_method :each, :peaks
73
75
  alias_method :each_peak, :peaks
74
76
 
77
+ # returns a bonafide Peaklist object (i.e., each peak is cast as a
78
+ # Mspire::Peak object). If peak_id is defined, each peak will be cast
79
+ # as a TaggedPeak object with the given peak_id
80
+ def to_peaklist(peak_id=nil)
81
+ # realize this isn't dry, but it is in such an inner loop it needs to be
82
+ # as fast as possible.
83
+ pl = Peaklist.new
84
+ if peak_id
85
+ peaks.each_with_index do |peak,i|
86
+ pl[i] = Mspire::Peak.new( peak )
87
+ end
88
+ else
89
+ peaks.each_with_index do |peak,i|
90
+ pl[i] = Mspire::TaggedPeak.new( peak, peak_id )
91
+ end
92
+ end
93
+ pl
94
+ end
95
+
75
96
  # if the mzs and intensities are the same then the spectra are considered
76
97
  # equal
77
98
  def ==(other)
@@ -0,0 +1,44 @@
1
+
2
+ module Mspire
3
+ # A TaggedPeak has a sample_id attribute. In the rest of its interface it
4
+ # behaves like a normal Mspire::Peak. There are no forward compatible
5
+ # guarantees if you use the array interface, but currently the TaggedPeak is
6
+ # arranged internally like this:
7
+ #
8
+ # [x, sample_id, y]
9
+ #
10
+ # Note that the object is instantiated like this:
11
+ #
12
+ # TaggedPeak.new( [x,y], sample_id )
13
+ #
14
+ # x and y value access are very fast because they are merely aliases against
15
+ # first and last.
16
+ class TaggedPeak < Array
17
+ # the m/z or x value
18
+ alias_method :x, :first
19
+ # the intensity or y value
20
+ alias_method :y, :last
21
+
22
+ def x=(val)
23
+ self[0] = val
24
+ end
25
+
26
+ def y=(val)
27
+ self[2] = val
28
+ end
29
+
30
+ def initialize(data, sample_id)
31
+ self[0] = data.first
32
+ self[1] = sample_id
33
+ self[2] = data.last
34
+ end
35
+
36
+ def sample_id
37
+ self[1]
38
+ end
39
+
40
+ def sample_id=(val)
41
+ self[1] = val
42
+ end
43
+ end
44
+ end
@@ -2,7 +2,8 @@
2
2
 
3
3
  require 'trollop'
4
4
  require 'mspire/mzml'
5
- require 'mspire/peak_list'
5
+ require 'mspire/peaklist'
6
+ require 'mspire/tagged_peak'
6
7
  require 'mspire/peak'
7
8
 
8
9
  def putsv(*args)
@@ -48,34 +49,6 @@ if ARGV.size == 0
48
49
  exit
49
50
  end
50
51
 
51
- class TracedPeak < Array
52
- # the m/z or x value
53
- alias_method :x, :first
54
- # the intensity or y value
55
- alias_method :y, :last
56
-
57
- def x=(val)
58
- self[0] = val
59
- end
60
-
61
- def y=(val)
62
- self[2] = val
63
- end
64
-
65
- def initialize(data, sample_id)
66
- self[0] = data.first
67
- self[1] = sample_id
68
- self[2] = data.last
69
- end
70
-
71
- def sample_id
72
- self[1]
73
- end
74
-
75
- def sample_id=(val)
76
- self[1] = val
77
- end
78
- end
79
52
 
80
53
  files = ARGV.dup
81
54
 
@@ -85,52 +58,39 @@ if opts[:sample_ids]
85
58
  basename_to_sample_id = YAML.load_file(opts[:sample_ids])
86
59
  end
87
60
 
88
- index_to_sample_id = {}
89
- sample_ids = files.each_with_index.map do |filename,index|
61
+ sample_ids = files.map do |filename|
90
62
  basename = filename.chomp(File.extname(filename))
91
- sample_id = basename_to_sample_id ? basename_to_sample_id[basename] : basename
63
+ basename_to_sample_id ? basename_to_sample_id[basename] : basename
64
+ end
65
+
66
+ peaklists = files.map do |filename|
92
67
  putsv "processing: #{filename}"
68
+ bunch_of_peaks = []
93
69
  Mspire::Mzml.open(filename) do |mzml|
94
70
  mzml.each_with_index do |spec,i|
95
71
  if spec.ms_level == 1
96
- peaks = spec.peaks
97
- #p peaks.size
98
- peaks.each do |peak|
99
- tp = TracedPeak.new(peak, index)
100
- peaklist << tp
101
- end
72
+ bunch_of_peaks.push(*spec.peaks)
102
73
  end
103
74
  end
104
75
  end
105
- index_to_sample_id[index] = sample_id
106
- sample_id
76
+ peaklist.sort_by!(&:x)
77
+ peaklist
107
78
  end
108
79
 
109
- putsv "gathered #{peaklist.size} peaks!"
110
-
111
- putsv "sorting all peaks"
112
- peaklist.sort!
113
-
114
80
  putsv "merging peaks"
115
81
  share_method = :greedy_y
116
82
  #share_method = :share
117
83
 
118
-
119
- peaks, data = Mspire::PeakList.merge([peaklist], opts.merge( {:split => share_method, :return_data => true} ))
84
+ ar_of_doublets = Mspire::PeakList.merge_and_deconvolve(peaklists, opts.merge( {:split => share_method, :return_data => true} ))
120
85
 
121
86
  File.open(opts[:outfile],'w') do |out|
122
87
 
123
88
  header = ["mzs", *sample_ids]
124
89
  out.puts header.join("\t")
125
90
 
126
- data.zip(peaks) do |bucket_of_peaks, meta_peak|
127
-
128
- signal_by_sample_index = Hash.new {|h,k| h[k] = 0.0 }
129
- bucket_of_peaks.each do |peak|
130
- signal_by_sample_index[peak.sample_id] += peak.y
131
- end
91
+ ar_of_doublets.each do |mz, ar_of_signals|
132
92
 
133
- row = [opts[:mz_prefix] + (meta_peak.x + opts[:simple_calibrate]).round(opts[:round_mz]).to_s, *sample_ids.each_with_index.map {|id,index| signal_by_sample_index[index].round(opts[:round_intensity]) }]
93
+ row = [opts[:mz_prefix] + (mz + opts[:simple_calibrate]).round(opts[:round_mz]).to_s, *ar_of_signals.map {|signal| signal.round(opts[:round_intensity]) }]
134
94
  out.puts row.join("\t")
135
95
  end
136
96
  end
@@ -1,9 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
- require 'mspire/peak_list'
3
+ require 'mspire/peaklist'
4
4
  require 'mspire/peak'
5
5
 
6
- describe Mspire::PeakList do
6
+ describe Mspire::Peaklist do
7
7
 
8
8
  describe '#split' do
9
9
 
@@ -30,28 +30,28 @@ describe Mspire::PeakList do
30
30
 
31
31
  it 'outlines peak boundaries' do
32
32
 
33
- peaklist = Mspire::PeakList[[5.08, 3]]
33
+ peaklist = Mspire::Peaklist[[5.08, 3]]
34
34
  boundaries = peaklist.peak_boundaries
35
35
  boundaries.should == [[0,0]]
36
36
 
37
- peaklist = Mspire::PeakList[[5.08, 3], [5.09, 8]]
37
+ peaklist = Mspire::Peaklist[[5.08, 3], [5.09, 8]]
38
38
  boundaries = peaklist.peak_boundaries
39
39
  boundaries.should == [[0,1]]
40
40
 
41
- peaklist = Mspire::PeakList[*@peaks]
41
+ peaklist = Mspire::Peaklist[*@peaks]
42
42
  boundaries = peaklist.peak_boundaries
43
43
  # 5 8 10 13 14 17 19 22 23 26 27
44
44
  #act = [0, 3, 8, 9, 7, 2, 0, 0, 3, 8, 2, 9, 7, 1, 3, 0, 0, 10, 8, 2, 9, 7, 1, 3, 0, 0, 10, 8, 0]
45
45
  boundaries.should == [[1, 5], [8, 10, 13, 14], [17, 19, 22, 23], [26, 27]]
46
46
 
47
47
  # another case that was failing early on:
48
- peaklist = Mspire::PeakList[[5.08, 3], [5.09, 8], [5.1, 2], [5.11, 9], [5.12, 7], [5.13, 1], [5.14, 3]]
48
+ peaklist = Mspire::Peaklist[[5.08, 3], [5.09, 8], [5.1, 2], [5.11, 9], [5.12, 7], [5.13, 1], [5.14, 3]]
49
49
  boundaries = peaklist.peak_boundaries
50
50
  boundaries.should == [[0,2,5,6]]
51
51
  end
52
52
 
53
53
  it 'splits on zeros by default' do
54
- peaklist = Mspire::PeakList[*@peaks] # <- maybe more like a collection of peaks, but PeakList is flexible
54
+ peaklist = Mspire::Peaklist[*@peaks] # <- maybe more like a collection of peaks, but Peaklist is flexible
55
55
  split_peaklist = peaklist.split
56
56
  split_peaklist.size.should == 4
57
57
  split_peaklist.should == [
@@ -64,36 +64,36 @@ describe Mspire::PeakList do
64
64
 
65
65
  # which it should since zeros are the ultimate local min!
66
66
  it 'always cleans up surrounding zeros and does not split non-multipeaks' do
67
- peak = Mspire::PeakList[*@peaks[0,7]] # simple
67
+ peak = Mspire::Peaklist[*@peaks[0,7]] # simple
68
68
  [:share, :greedy_y].each do |multipeak_split_method|
69
69
  peaks = peak.split(multipeak_split_method)
70
- peaks.first.should be_an_instance_of(Mspire::PeakList)
70
+ peaks.first.should be_an_instance_of(Mspire::Peaklist)
71
71
  peaks.first.to_a.should == [[50.01, 3], [50.02, 8], [50.03, 9], [50.04, 7], [50.05, 2]]
72
72
  end
73
73
  end
74
74
 
75
- describe 'splitting a peak_list that is a multipeak' do
75
+ describe 'splitting a peaklist that is a multipeak' do
76
76
  subject do
77
- Mspire::PeakList[[50.07, 0], [50.08, 3], [50.09, 8], [50.1, 2], [50.11, 9], [50.12, 7], [50.13, 1], [50.14, 3], [50.15, 0]]
77
+ Mspire::Peaklist[[50.07, 0], [50.08, 3], [50.09, 8], [50.1, 2], [50.11, 9], [50.12, 7], [50.13, 1], [50.14, 3], [50.15, 0]]
78
78
  end
79
79
 
80
80
  it 'can split a multipeak' do
81
- multipeak = Mspire::PeakList[[5.08, 3], [5.09, 8]]
81
+ multipeak = Mspire::Peaklist[[5.08, 3], [5.09, 8]]
82
82
  peaklists = multipeak.split_contiguous(:greedy_y)
83
83
  peaklists.should == [[5.08, 3], [5.09, 8]]
84
84
 
85
- multipeak = Mspire::PeakList[[5.08, 3]]
85
+ multipeak = Mspire::Peaklist[[5.08, 3]]
86
86
  peaklists = multipeak.split_contiguous(:greedy_y)
87
87
  peaklists.should == [[5.08, 3]]
88
88
 
89
- multipeak = Mspire::PeakList[[5.08, 3], [5.09, 8], [5.1, 2], [5.11, 9], [5.12, 7], [5.13, 1], [5.14, 3]]
89
+ multipeak = Mspire::Peaklist[[5.08, 3], [5.09, 8], [5.1, 2], [5.11, 9], [5.12, 7], [5.13, 1], [5.14, 3]]
90
90
  peaklists = multipeak.split_contiguous(:greedy_y)
91
- peaklists.all? {|pl| pl.should be_a(Mspire::PeakList) }
91
+ peaklists.all? {|pl| pl.should be_a(Mspire::Peaklist) }
92
92
  peaklists.should == [[[5.08, 3], [5.09, 8]], [[5.1, 2], [5.11, 9], [5.12, 7], [5.13, 1]], [[5.14, 3]]]
93
93
 
94
- multipeak = Mspire::PeakList[[5.08, 3], [5.09, 8], [5.1, 2], [5.11, 9], [5.12, 7], [5.13, 1], [5.14, 3]]
94
+ multipeak = Mspire::Peaklist[[5.08, 3], [5.09, 8], [5.1, 2], [5.11, 9], [5.12, 7], [5.13, 1], [5.14, 3]]
95
95
  peaklists = multipeak.split_contiguous(:share)
96
- peaklists.all? {|pl| pl.should be_a(Mspire::PeakList) }
96
+ peaklists.all? {|pl| pl.should be_a(Mspire::Peaklist) }
97
97
  peaklists.should == [[[5.08, 3], [5.09, 8], [5.1, 2*(8.0/17)]], [[5.1, 2*(9.0/17)], [5.11, 9], [5.12, 7], [5.13, 7.0/10]], [[5.13, 3.0/10], [5.14, 3]]]
98
98
 
99
99
  end
@@ -133,7 +133,7 @@ describe Mspire::PeakList do
133
133
  # test a tie -> goes left!
134
134
  peaks = @peaks[7,9]
135
135
  peaks[2] = Mspire::Peak.new([peaks[2][0], 9])
136
- multipeak2 = Mspire::PeakList[ *peaks ]
136
+ multipeak2 = Mspire::Peaklist[ *peaks ]
137
137
  multipeak2.split(:greedy_y).should == answer
138
138
  end
139
139
 
@@ -154,34 +154,34 @@ describe Mspire::PeakList do
154
154
  list2 = [[9.11, 6], [10.49, 5], [10.71, 7], [13.48, 8]].map {|pair| Mspire::Peak.new pair }
155
155
  list3 = [[9.09, 11], [10.51, 9], [10.72, 10], [13.51, 12]].map {|pair| Mspire::Peak.new pair }
156
156
 
157
- [list1, list2, list3].map {|peaks| Mspire::PeakList.new( peaks ) }
157
+ [list1, list2, list3].map {|peaks| Mspire::Peaklist.new( peaks ) }
158
158
  end
159
159
 
160
160
  it 'whether we ask for data back or not, the peaklist is equal' do
161
- (peaklist1, data) = Mspire::PeakList.merge(subject, :bin_width => 0.08, :bin_unit => :amu, :return_data => true, :split => false)
162
- peaklist2 = Mspire::PeakList.merge(subject, :bin_width => 0.08, :bin_unit => :amu, :split => :zero)
161
+ (peaklist1, data) = Mspire::Peaklist.merge(subject, :bin_width => 0.08, :bin_unit => :amu, :return_data => true, :split => false)
162
+ peaklist2 = Mspire::Peaklist.merge(subject, :bin_width => 0.08, :bin_unit => :amu, :split => :zero)
163
163
  peaklist1.should == peaklist2
164
164
 
165
165
  peaks = [[10.097333333333331, 10.502222222222223, 10.713809523809525, 11.498333333333333], [5.0, 6.0, 7.0, 8.0]].transpose
166
- #compare_peaklist_sets(peaklist1, Mspire::PeakList.new(peaks))
166
+ #compare_peaklist_sets(peaklist1, Mspire::Peaklist.new(peaks))
167
167
  #compare_peaklist_sets(data, [[[10.1, 1], [10.11, 5], [10.09, 9]], [[10.5, 2], [10.49, 6], [10.51, 10]], [[10.7, 3], [10.71, 7], [10.72, 11]], [[11.5, 4], [11.48, 8], [11.51, 12]]] )
168
168
 
169
169
  end
170
170
 
171
171
  it 'gives one peak with large bin width' do
172
172
  [true, false].zip([26.0, 78.0]) do |normalize, inten|
173
- peak_list = Mspire::PeakList.merge(subject, :bin_width => 2.5, :bin_unit => :amu, :normalize => normalize, :split => :greedy_y)
174
- peak_list.size.should == 1
175
- peak_list.first.x.should be_within(0.00000000001).of(11.136153846153846)
176
- peak_list.first.y.should == inten
173
+ peaklist = Mspire::Peaklist.merge(subject, :bin_width => 2.5, :bin_unit => :amu, :normalize => normalize, :split => :greedy_y)
174
+ peaklist.size.should == 1
175
+ peaklist.first.x.should be_within(0.00000000001).of(11.136153846153846)
176
+ peaklist.first.y.should == inten
177
177
  end
178
178
  end
179
179
 
180
180
  it 'regardless of split method, the total intensity remains the same' do
181
181
  (0.1..2.3).step(0.1).to_a.each do |bw|
182
182
  tot_ints = [:zero, :split, :greedy_y].map do |splt|
183
- peak_list = Mspire::PeakList.merge(subject, :bin_width => bw, :bin_unit => :amu, :split => :zero)
184
- peak_list.map(&:y).reduce(:+)
183
+ peaklist = Mspire::Peaklist.merge(subject, :bin_width => bw, :bin_unit => :amu, :split => :zero)
184
+ peaklist.map(&:y).reduce(:+)
185
185
  end
186
186
  tot_ints.all? {|v| tot_ints.first == v }.should be_true
187
187
  end
@@ -191,7 +191,7 @@ describe Mspire::PeakList do
191
191
  before = Marshal.load(Marshal.dump(subject))
192
192
  subj = Marshal.load(Marshal.dump(subject))
193
193
  [:zero, :greedy_y].each do |split_mthd|
194
- Mspire::PeakList.merge(subj, :bin_width => 2.2, :bin_unit => :amu, :split => split_mthd, :return_data => true)
194
+ Mspire::Peaklist.merge(subj, :bin_width => 2.2, :bin_unit => :amu, :split => split_mthd, :return_data => true)
195
195
  subj.should == before
196
196
  end
197
197
  end
@@ -201,9 +201,9 @@ describe Mspire::PeakList do
201
201
  it "gives reasonable m/z values with very small binwidths (#{methd})" do
202
202
  expected = [[9.09, 3.6666666666666665], [9.1, 0.6666666666666666], [9.11, 2.0], [10.49, 1.6666666666666667], [10.5, 0.3333333333333333], [10.51, 3.0], [10.7, 1.0], [10.71, 2.3333333333333335], [10.72, 3.3333333333333335], [13.48, 2.6666666666666665], [13.5, 1.3333333333333333], [13.51, 4.0]]
203
203
  bw = 0.001
204
- peak_list = Mspire::PeakList.merge(subject, :bin_width => bw, :bin_unit => :amu, :split => methd)
205
- peak_list.size.should == expected.size
206
- expected.zip(peak_list) do |exp, act|
204
+ peaklist = Mspire::Peaklist.merge(subject, :bin_width => bw, :bin_unit => :amu, :split => methd)
205
+ peaklist.size.should == expected.size
206
+ expected.zip(peaklist) do |exp, act|
207
207
  act.first.should == exp.first
208
208
  act.last.should be_within(0.00000000001).of(exp.last)
209
209
  end
@@ -211,24 +211,24 @@ describe Mspire::PeakList do
211
211
 
212
212
  it 'gives reasonable m/z values for large binwidths' do
213
213
  bw = 2.2
214
- peak_list = Mspire::PeakList.merge(subject, :bin_width => bw, :bin_unit => :amu, :split => methd)
215
- (peak_list.last.x > 13.51).should_not be_true
216
- (peak_list.size > 2).should_not be_true
214
+ peaklist = Mspire::Peaklist.merge(subject, :bin_width => bw, :bin_unit => :amu, :split => methd)
215
+ (peaklist.last.x > 13.51).should_not be_true
216
+ (peaklist.size > 2).should_not be_true
217
217
  end
218
218
 
219
219
  it 'gives same total intensity' do
220
220
  bw = 0.8
221
221
  total_intensity = subject.inject(0.0) {|sum,peaklist| sum + peaklist.map(&:y).reduce(:+) }
222
- peak_list, data = Mspire::PeakList.merge(subject, :bin_width => bw, :bin_unit => :amu, :split => methd, :normalize => false, :return_data => true)
223
- after = peak_list.inject(0.0) {|sum,peak| sum + peak.y }
222
+ peaklist, data = Mspire::Peaklist.merge(subject, :bin_width => bw, :bin_unit => :amu, :split => methd, :normalize => false, :return_data => true)
223
+ after = peaklist.inject(0.0) {|sum,peak| sum + peak.y }
224
224
  after.should be_within(0.00000001).of(total_intensity)
225
225
  end
226
226
 
227
227
  it 'gives reasonable m/z values for medium-large binwidths' do
228
228
  expected = [[10.086296296296297, 18.0], [13.498333333333333, 8.0]]
229
229
  bw = 1.3
230
- peak_list = Mspire::PeakList.merge(subject, :bin_width => bw, :bin_unit => :amu, :split => methd)
231
- expected.zip(peak_list) do |exp, act|
230
+ peaklist = Mspire::Peaklist.merge(subject, :bin_width => bw, :bin_unit => :amu, :split => methd)
231
+ expected.zip(peaklist) do |exp, act|
232
232
 
233
233
  act.first.should == exp.first
234
234
  act.last.should be_within(0.00000000001).of(exp.last)
@@ -239,14 +239,14 @@ describe Mspire::PeakList do
239
239
 
240
240
 
241
241
  =begin
242
- data = Mspire::PeakList.merge(subject, :bin_width => 1000, :bin_unit => :ppm, :only_data => true)
242
+ data = Mspire::Peaklist.merge(subject, :bin_width => 1000, :bin_unit => :ppm, :only_data => true)
243
243
  # just frozen, and checking for sanity, not checked for perfect, accuracy at this level:
244
244
  data.should == [[[10.09, 9]], [[10.1, 1]], [[10.11, 5]], [[10.49, 6]], [[10.5, 2]], [[10.51, 10]], [[10.7, 3]], [[10.71, 7]], [[10.72, 11]], [[11.48, 8]], [[11.5, 4]], [[11.51, 12]]]
245
245
 
246
246
  [[[10.1, 1], [10.09, 9], [10.11, 5]], [[10.49, 6], [10.5, 2]], [[10.5, 2], [10.51, 10]], [[10.7, 3], [10.71, 7], [10.72, 11]], [[11.48, 8], [11.5, 4]], [[11.5, 4], [11.51, 12]]]
247
- #peaklist3 = Mspire::PeakList.merge(subject, :bin_width => 100, :bin_unit => :ppm)
247
+ #peaklist3 = Mspire::Peaklist.merge(subject, :bin_width => 100, :bin_unit => :ppm)
248
248
  #p peaklist3
249
- peaklist4 = Mspire::PeakList.merge(subject, :bin_width => 1000, :bin_unit => :ppm, :normalize => false)
249
+ peaklist4 = Mspire::Peaklist.merge(subject, :bin_width => 1000, :bin_unit => :ppm, :normalize => false)
250
250
  peaklist4.should == [[10.097333333333331, 15.0], [10.49111111111111, 6.75], [10.508888888888887, 11.25], [10.713809523809525, 21.0], [11.483333333333334, 9.6], [11.508333333333331, 14.4]]
251
251
  =end
252
252
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mspire
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.12
4
+ version: 0.7.13
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-05-10 00:00:00.000000000 Z
13
+ date: 2012-07-10 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: nokogiri
@@ -282,13 +282,14 @@ files:
282
282
  - lib/mspire/mzml/spectrum_list.rb
283
283
  - lib/mspire/obo.rb
284
284
  - lib/mspire/peak.rb
285
- - lib/mspire/peak_list.rb
285
+ - lib/mspire/peaklist.rb
286
286
  - lib/mspire/plms1.rb
287
287
  - lib/mspire/quant/qspec.rb
288
288
  - lib/mspire/quant/qspec/protein_group_comparison.rb
289
289
  - lib/mspire/spectrum.rb
290
290
  - lib/mspire/spectrum/centroid.rb
291
291
  - lib/mspire/spectrum_like.rb
292
+ - lib/mspire/tagged_peak.rb
292
293
  - lib/mspire/user_param.rb
293
294
  - lib/obo/ims.rb
294
295
  - lib/obo/ms.rb