mspire 0.7.8 → 0.7.9

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.
@@ -24,7 +24,7 @@ type = opts[:type].to_sym
24
24
  compressed = !opts[:not_compressed]
25
25
 
26
26
  ARGV.each do |base64|
27
- puts MS::Mzml::DataArray.from_binary(base64, type, compressed).join(" ")
27
+ puts Mspire::Mzml::DataArray.from_binary(base64, type, compressed).join(" ")
28
28
  end
29
29
 
30
30
 
@@ -0,0 +1,110 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'trollop'
4
+ require 'mspire/mzml'
5
+ require 'mspire/peak_list'
6
+ require 'mspire/peak'
7
+
8
+ DEFAULT_OUTFILE = "quant_compare.tsv"
9
+
10
+ DEFAULTS = {
11
+ :bin_width => Mspire::PeakList::DEFAULT_MERGE[:bin_width],
12
+ :bin_unit => Mspire::PeakList::DEFAULT_MERGE[:bin_unit],
13
+ }
14
+
15
+ parser = Trollop::Parser.new do
16
+ banner "usage: #{File.basename(__FILE__)} <file>.mzML ..."
17
+ banner "output: #{DEFAULT_OUTFILE}"
18
+ banner ""
19
+ opt :outfile, "write results to this file", :default => DEFAULT_OUTFILE
20
+ opt :bin_width, "width of the bins for merging", :default => DEFAULTS[:bin_width]
21
+ opt :bin_unit, "units for binning (ppm or amu)", :default => DEFAULTS[:bin_unit].to_s
22
+ opt :sample_ids, "a yml file pointing basename to id", :type => :string
23
+ end
24
+
25
+ opts = parser.parse(ARGV)
26
+ opts[:bin_unit] = opts[:bin_unit].to_sym
27
+
28
+ if ARGV.size == 0
29
+ parser.educate
30
+ exit
31
+ end
32
+
33
+ class TracedPeak < Array
34
+ # the m/z or x value
35
+ alias_method :x, :first
36
+ # the intensity or y value
37
+ alias_method :y, :last
38
+
39
+ def initialize(data, sample_id)
40
+ self[0] = data.first
41
+ self[1] = sample_id
42
+ self[2] = data.last
43
+ end
44
+
45
+ def sample_id
46
+ self[1]
47
+ end
48
+
49
+ def sample_id=(val)
50
+ self[1] = val
51
+ end
52
+ end
53
+
54
+ files = ARGV.dup
55
+
56
+ peaklist = Mspire::PeakList.new
57
+
58
+ if opts[:sample_ids]
59
+ basename_to_sample_id = YAML.load_file(opts[:sample_ids])
60
+ end
61
+
62
+ index_to_sample_id = {}
63
+ sample_ids = files.each_with_index.map do |filename,index|
64
+ basename = filename.chomp(File.extname(filename))
65
+ sample_id = basename_to_sample_id ? basename_to_sample_id[basename] : basename
66
+ puts "processing: #{filename}"
67
+ Mspire::Mzml.open(filename) do |mzml|
68
+ mzml.each_with_index do |spec,i|
69
+ if spec.ms_level == 1
70
+ peaks = spec.peaks
71
+ #p peaks.size
72
+ peaks.each do |peak|
73
+ tp = TracedPeak.new(peak, index)
74
+ peaklist << tp
75
+ end
76
+ end
77
+ end
78
+ end
79
+ index_to_sample_id[index] = sample_id
80
+ sample_id
81
+ end
82
+
83
+ puts "gathered #{peaklist.size} peaks!"
84
+
85
+ puts "sorting all peaks"
86
+ peaklist.sort!
87
+
88
+ puts "merging peaks"
89
+ #share_method = :greedy_y
90
+ share_method = :share
91
+
92
+ $VERBOSE = true
93
+ data = Mspire::PeakList.merge([peaklist], opts.merge( {:only_data => true, :split => share_method} ))
94
+ p data.size
95
+ p data.first.size
96
+
97
+ File.open(opts[:outfile],'w') do |out|
98
+
99
+ header = ["mzs", *sample_ids]
100
+ out.puts header.join("\t")
101
+
102
+ data.each do |bucket_of_peaks|
103
+ signal_by_sample_index = Hash.new {|h,k| h[k] = 0.0 }
104
+ mz = weighted_mz
105
+ row = [mz.round(6), *sample_ids.each_with_index.map {|id,index| signal_by_sample_index[index] }]
106
+ out.puts row.join("\t")
107
+ end
108
+ end
109
+
110
+
@@ -25,28 +25,46 @@ describe Mspire::PeakList do
25
25
  mz += diff
26
26
  end
27
27
  @xs.map! {|mz| mz.round(2) }
28
- @peaks = @xs.zip(@intensities).map {|pair| Mspire::Peak.new(pair) }
28
+ @peaks = @xs.zip(@intensities)
29
+ end
30
+
31
+ it 'outlines peak boundaries' do
32
+
33
+ peaklist = Mspire::PeakList[[5.08, 3]]
34
+ boundaries = peaklist.peak_boundaries
35
+ boundaries.should == [[0,0]]
36
+
37
+ peaklist = Mspire::PeakList[[5.08, 3], [5.09, 8]]
38
+ boundaries = peaklist.peak_boundaries
39
+ boundaries.should == [[0,1]]
40
+
41
+ peaklist = Mspire::PeakList[*@peaks]
42
+ boundaries = peaklist.peak_boundaries
43
+ # 5 8 10 13 14 17 19 22 23 26 27
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
+ boundaries.should == [[1, 5], [8, 10, 13, 14], [17, 19, 22, 23], [26, 27]]
46
+
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]]
49
+ boundaries = peaklist.peak_boundaries
50
+ boundaries.should == [[0,2,5,6]]
29
51
  end
30
52
 
31
53
  it 'splits on zeros by default' do
32
- peak = Mspire::PeakList.new(@peaks) # <- maybe more like a collection of peaks, but PeakList is flexible
33
- peaks = peak.split
34
- peaks.size.should == 4
35
- peaks.should == [
54
+ peaklist = Mspire::PeakList[*@peaks] # <- maybe more like a collection of peaks, but PeakList is flexible
55
+ split_peaklist = peaklist.split
56
+ split_peaklist.size.should == 4
57
+ split_peaklist.should == [
36
58
  [[50.01, 3], [50.02, 8], [50.03, 9], [50.04, 7], [50.05, 2]],
37
59
  [[50.08, 3], [50.09, 8], [50.1, 2], [50.11, 9], [50.12, 7], [50.13, 1], [50.14, 3]],
38
60
  [[50.17, 10], [50.18, 8], [50.19, 2], [50.2, 9], [50.21, 7], [50.22, 1], [50.23, 3]],
39
61
  [[50.26, 10], [50.27, 8]]
40
62
  ]
41
- # returns local minima if asked
42
- (peaks2, local_minima) = peak.split(false, true)
43
- peaks2.should == peaks
44
- local_minima.should == [[], [2, 5], [2, 5], []]
45
63
  end
46
64
 
47
65
  # which it should since zeros are the ultimate local min!
48
66
  it 'always cleans up surrounding zeros and does not split non-multipeaks' do
49
- peak = Mspire::PeakList.new(@peaks[0,7]) # simple
67
+ peak = Mspire::PeakList[*@peaks[0,7]] # simple
50
68
  [:share, :greedy_y].each do |multipeak_split_method|
51
69
  peaks = peak.split(multipeak_split_method)
52
70
  peaks.first.should be_an_instance_of(Mspire::PeakList)
@@ -54,58 +72,185 @@ describe Mspire::PeakList do
54
72
  end
55
73
  end
56
74
 
57
- it 'does #split(:share) and shares the peak proportional to adjacent peaks' do
58
- data = [[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]]
59
- multipeak1 = Mspire::PeakList.new( data )
75
+ describe 'splitting a peak_list that is a multipeak' do
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]]
78
+ end
79
+
80
+ it 'can split a multipeak' do
81
+ multipeak = Mspire::PeakList[[5.08, 3], [5.09, 8]]
82
+ peaklists = multipeak.split_contiguous(:greedy_y)
83
+ peaklists.should == [[5.08, 3], [5.09, 8]]
60
84
 
61
- answer = [
62
- [[50.08, 3], [50.09, 8], [50.1, (2*8.0/17)]],
63
- [[50.1, 2*9.0/17], [50.11, 9], [50.12, 7], [50.13, 0.7]],
64
- [[50.13, 0.3], [50.14, 3]]
65
- ]
66
- multipeak1.split(:share).should == answer
85
+ multipeak = Mspire::PeakList[[5.08, 3]]
86
+ peaklists = multipeak.split_contiguous(:greedy_y)
87
+ peaklists.should == [[5.08, 3]]
67
88
 
68
- answer = [
69
- [[50.08, 3], [50.09, 8]],
70
- [[50.1, 2], [50.11, 9], [50.12, 7], [50.13, 1]],
71
- [[50.14, 3]]
72
- ]
73
- multipeak1.split(:greedy_y).should == answer
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
+ peaklists = multipeak.split_contiguous(:greedy_y)
91
+ peaklists.all? {|pl| pl.should be_a(Mspire::PeakList) }
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
+
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
+ peaklists = multipeak.split_contiguous(:share)
96
+ peaklists.all? {|pl| pl.should be_a(Mspire::PeakList) }
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]]]
74
98
 
75
- answer = [
76
- [[50.08, 3], [50.09, 9], [50.1, 2]],
77
- [[50.11, 9], [50.12, 7], [50.13, 1]],
78
- [[50.14, 3]]
79
- ]
99
+ end
100
+
101
+ it 'does #split(:share) and shares the peak proportional to adjacent peaks' do
102
+ answer = [
103
+ [[50.08, 3], [50.09, 8], [50.1, (2*8.0/17)]],
104
+ [[50.1, 2*9.0/17], [50.11, 9], [50.12, 7], [50.13, 0.7]],
105
+ [[50.13, 0.3], [50.14, 3]]
106
+ ]
107
+ subject.split(:share).should == answer
108
+ end
80
109
 
81
- # test a tie -> goes left!
82
- peaks = @peaks[7,9]
83
- peaks[2] = Mspire::Peak.new([peaks[2][0], 9])
84
- multipeak2 = Mspire::PeakList.new( peaks )
85
- multipeak2.split(:greedy_y).should == answer
110
+ it 'does #split(:greedy_y) and gives the local min to highest adjacent peak' do
111
+
112
+ answer = [
113
+ [[50.08, 3], [50.09, 8]],
114
+ [[50.1, 2], [50.11, 9], [50.12, 7], [50.13, 1]],
115
+ [[50.14, 3]]
116
+ ]
117
+ subject.split(:greedy_y).should == answer
118
+
119
+ end
120
+
121
+ it '#split splits on whitespace by default' do
122
+ subject[4,0] = [Mspire::Peak.new([50.105, 0])]
123
+ subject.split.should == [[[50.08, 3], [50.09, 8], [50.1, 2]], [[50.11, 9], [50.12, 7], [50.13, 1], [50.14, 3]]]
124
+ end
125
+
126
+ it 'gives local min to left peaklist in event of a tie with #split(:greedy_y)' do
127
+ answer = [
128
+ [[50.08, 3], [50.09, 9], [50.1, 2]],
129
+ [[50.11, 9], [50.12, 7], [50.13, 1]],
130
+ [[50.14, 3]]
131
+ ]
132
+
133
+ # test a tie -> goes left!
134
+ peaks = @peaks[7,9]
135
+ peaks[2] = Mspire::Peak.new([peaks[2][0], 9])
136
+ multipeak2 = Mspire::PeakList[ *peaks ]
137
+ multipeak2.split(:greedy_y).should == answer
138
+ end
86
139
 
87
140
  end
88
141
  end
89
142
 
90
143
  describe '#merge' do
91
144
 
92
- subject do
145
+ def compare_peaklist_sets(set1, set2)
146
+ set1.zip(set2) do |pl1, pl2|
147
+ pl1.sort.should == pl2.sort
148
+ end
149
+ end
150
+
151
+ subject do
93
152
 
94
- list1 = [[10.1, 1], [10.5, 2], [10.7, 3], [11.5, 4]]
95
- list2 = [[10.11, 5], [10.49, 6], [10.71, 7], [11.48, 8]]
96
- list3 = [[10.09, 9], [10.51, 10], [10.72, 11], [11.51, 12]]
153
+ list1 = [[9.1, 2], [10.5, 1], [10.7, 3], [13.5, 4]].map {|pair| Mspire::Peak.new pair }
154
+ list2 = [[9.11, 6], [10.49, 5], [10.71, 7], [13.48, 8]].map {|pair| Mspire::Peak.new pair }
155
+ list3 = [[9.09, 11], [10.51, 9], [10.72, 10], [13.51, 12]].map {|pair| Mspire::Peak.new pair }
97
156
 
98
157
  [list1, list2, list3].map {|peaks| Mspire::PeakList.new( peaks ) }
99
158
  end
100
159
 
101
- it 'merges, giving exact weighted average m/z values for each cluster' do
102
- (peaklist1, data) = Mspire::PeakList.merge(subject, :bin_width => 0.08, :bin_unit => :amu, :return_data => true)
103
- peaklist2 = Mspire::PeakList.merge(subject, :bin_width => 0.08, :bin_unit => :amu)
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)
104
163
  peaklist1.should == peaklist2
164
+
105
165
  peaks = [[10.097333333333331, 10.502222222222223, 10.713809523809525, 11.498333333333333], [5.0, 6.0, 7.0, 8.0]].transpose
106
- peaklist1.should == Mspire::PeakList.new(peaks)
107
- data.should == [[[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]]]
166
+ #compare_peaklist_sets(peaklist1, Mspire::PeakList.new(peaks))
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
+
108
169
  end
170
+
171
+ it 'gives one peak with large bin width' do
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
177
+ end
178
+ end
179
+
180
+ it 'regardless of split method, the total intensity remains the same' do
181
+ (0.1..2.3).step(0.1).to_a.each do |bw|
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(:+)
185
+ end
186
+ tot_ints.all? {|v| tot_ints.first == v }.should be_true
187
+ end
188
+ end
189
+
190
+ it 'does not alter the original data in any way (for :greedy_y or :zero)' do
191
+ before = Marshal.load(Marshal.dump(subject))
192
+ subj = Marshal.load(Marshal.dump(subject))
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)
195
+ subj.should == before
196
+ end
197
+ end
198
+
199
+ [:zero, :share, :greedy_y].each do |methd|
200
+
201
+ it "gives reasonable m/z values with very small binwidths (#{methd})" do
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
+ 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|
207
+ act.first.should == exp.first
208
+ act.last.should be_within(0.00000000001).of(exp.last)
209
+ end
210
+ end
211
+
212
+ it 'gives reasonable m/z values for large binwidths' do
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
217
+ end
218
+
219
+ it 'gives same total intensity' do
220
+ bw = 0.8
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 }
224
+ after.should be_within(0.00000001).of(total_intensity)
225
+ end
226
+
227
+ it 'gives reasonable m/z values for medium-large binwidths' do
228
+ expected = [[10.086296296296297, 18.0], [13.498333333333333, 8.0]]
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|
232
+
233
+ act.first.should == exp.first
234
+ act.last.should be_within(0.00000000001).of(exp.last)
235
+ end
236
+ end
237
+ end
238
+
239
+
240
+
241
+ =begin
242
+ data = Mspire::PeakList.merge(subject, :bin_width => 1000, :bin_unit => :ppm, :only_data => true)
243
+ # just frozen, and checking for sanity, not checked for perfect, accuracy at this level:
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
+
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)
248
+ #p peaklist3
249
+ peaklist4 = Mspire::PeakList.merge(subject, :bin_width => 1000, :bin_unit => :ppm, :normalize => false)
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
+ =end
252
+
253
+
109
254
  end
110
255
 
111
256
  end
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.8
4
+ version: 0.7.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-03-29 00:00:00.000000000 Z
13
+ date: 2012-04-14 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: nokogiri
17
- requirement: !ruby/object:Gem::Requirement
17
+ requirement: &23083440 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,15 +22,10 @@ dependencies:
22
22
  version: '1.5'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
- requirements:
28
- - - ~>
29
- - !ruby/object:Gem::Version
30
- version: '1.5'
25
+ version_requirements: *23083440
31
26
  - !ruby/object:Gem::Dependency
32
27
  name: bsearch
33
- requirement: !ruby/object:Gem::Requirement
28
+ requirement: &23080720 !ruby/object:Gem::Requirement
34
29
  none: false
35
30
  requirements:
36
31
  - - ! '>='
@@ -38,15 +33,10 @@ dependencies:
38
33
  version: 1.5.0
39
34
  type: :runtime
40
35
  prerelease: false
41
- version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
- requirements:
44
- - - ! '>='
45
- - !ruby/object:Gem::Version
46
- version: 1.5.0
36
+ version_requirements: *23080720
47
37
  - !ruby/object:Gem::Dependency
48
38
  name: andand
49
- requirement: !ruby/object:Gem::Requirement
39
+ requirement: &23078680 !ruby/object:Gem::Requirement
50
40
  none: false
51
41
  requirements:
52
42
  - - ! '>='
@@ -54,15 +44,10 @@ dependencies:
54
44
  version: 1.3.1
55
45
  type: :runtime
56
46
  prerelease: false
57
- version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
- requirements:
60
- - - ! '>='
61
- - !ruby/object:Gem::Version
62
- version: 1.3.1
47
+ version_requirements: *23078680
63
48
  - !ruby/object:Gem::Dependency
64
49
  name: obo
65
- requirement: !ruby/object:Gem::Requirement
50
+ requirement: &23076600 !ruby/object:Gem::Requirement
66
51
  none: false
67
52
  requirements:
68
53
  - - ! '>='
@@ -70,15 +55,10 @@ dependencies:
70
55
  version: 0.1.0
71
56
  type: :runtime
72
57
  prerelease: false
73
- version_requirements: !ruby/object:Gem::Requirement
74
- none: false
75
- requirements:
76
- - - ! '>='
77
- - !ruby/object:Gem::Version
78
- version: 0.1.0
58
+ version_requirements: *23076600
79
59
  - !ruby/object:Gem::Dependency
80
60
  name: builder
81
- requirement: !ruby/object:Gem::Requirement
61
+ requirement: &23074560 !ruby/object:Gem::Requirement
82
62
  none: false
83
63
  requirements:
84
64
  - - ~>
@@ -86,15 +66,10 @@ dependencies:
86
66
  version: 3.0.0
87
67
  type: :runtime
88
68
  prerelease: false
89
- version_requirements: !ruby/object:Gem::Requirement
90
- none: false
91
- requirements:
92
- - - ~>
93
- - !ruby/object:Gem::Version
94
- version: 3.0.0
69
+ version_requirements: *23074560
95
70
  - !ruby/object:Gem::Dependency
96
71
  name: bio
97
- requirement: !ruby/object:Gem::Requirement
72
+ requirement: &23073060 !ruby/object:Gem::Requirement
98
73
  none: false
99
74
  requirements:
100
75
  - - ~>
@@ -102,15 +77,10 @@ dependencies:
102
77
  version: 1.4.2
103
78
  type: :runtime
104
79
  prerelease: false
105
- version_requirements: !ruby/object:Gem::Requirement
106
- none: false
107
- requirements:
108
- - - ~>
109
- - !ruby/object:Gem::Version
110
- version: 1.4.2
80
+ version_requirements: *23073060
111
81
  - !ruby/object:Gem::Dependency
112
82
  name: trollop
113
- requirement: !ruby/object:Gem::Requirement
83
+ requirement: &23071860 !ruby/object:Gem::Requirement
114
84
  none: false
115
85
  requirements:
116
86
  - - ~>
@@ -118,15 +88,21 @@ dependencies:
118
88
  version: 1.16.2
119
89
  type: :runtime
120
90
  prerelease: false
121
- version_requirements: !ruby/object:Gem::Requirement
91
+ version_requirements: *23071860
92
+ - !ruby/object:Gem::Dependency
93
+ name: uuid
94
+ requirement: &23070700 !ruby/object:Gem::Requirement
122
95
  none: false
123
96
  requirements:
124
- - - ~>
97
+ - - ! '>='
125
98
  - !ruby/object:Gem::Version
126
- version: 1.16.2
99
+ version: 2.3.5
100
+ type: :runtime
101
+ prerelease: false
102
+ version_requirements: *23070700
127
103
  - !ruby/object:Gem::Dependency
128
104
  name: fftw3
129
- requirement: !ruby/object:Gem::Requirement
105
+ requirement: &23068400 !ruby/object:Gem::Requirement
130
106
  none: false
131
107
  requirements:
132
108
  - - ~>
@@ -134,15 +110,10 @@ dependencies:
134
110
  version: '0.3'
135
111
  type: :development
136
112
  prerelease: false
137
- version_requirements: !ruby/object:Gem::Requirement
138
- none: false
139
- requirements:
140
- - - ~>
141
- - !ruby/object:Gem::Version
142
- version: '0.3'
113
+ version_requirements: *23068400
143
114
  - !ruby/object:Gem::Dependency
144
115
  name: rspec
145
- requirement: !ruby/object:Gem::Requirement
116
+ requirement: &23066100 !ruby/object:Gem::Requirement
146
117
  none: false
147
118
  requirements:
148
119
  - - ~>
@@ -150,15 +121,10 @@ dependencies:
150
121
  version: '2.6'
151
122
  type: :development
152
123
  prerelease: false
153
- version_requirements: !ruby/object:Gem::Requirement
154
- none: false
155
- requirements:
156
- - - ~>
157
- - !ruby/object:Gem::Version
158
- version: '2.6'
124
+ version_requirements: *23066100
159
125
  - !ruby/object:Gem::Dependency
160
126
  name: jeweler
161
- requirement: !ruby/object:Gem::Requirement
127
+ requirement: &23063900 !ruby/object:Gem::Requirement
162
128
  none: false
163
129
  requirements:
164
130
  - - ~>
@@ -166,12 +132,7 @@ dependencies:
166
132
  version: 1.5.2
167
133
  type: :development
168
134
  prerelease: false
169
- version_requirements: !ruby/object:Gem::Requirement
170
- none: false
171
- requirements:
172
- - - ~>
173
- - !ruby/object:Gem::Version
174
- version: 1.5.2
135
+ version_requirements: *23063900
175
136
  description: mass spectrometry proteomics, lipidomics, and tools, a rewrite of mspire,
176
137
  merging of ms-* gems
177
138
  email: jtprince@gmail.com
@@ -280,11 +241,11 @@ files:
280
241
  - lib/obo/unit.rb
281
242
  - lib/openany.rb
282
243
  - lib/write_file_or_string.rb
283
- - mspire.gemspec
284
244
  - obo/ims.obo
285
245
  - obo/ms.obo
286
246
  - obo/unit.obo
287
247
  - script/mzml_read_binary.rb
248
+ - script/quant_compare_direct_injections.rb
288
249
  - spec/cv/param_spec.rb
289
250
  - spec/mspire/bin_spec.rb
290
251
  - spec/mspire/cv/obo_spec.rb
@@ -372,7 +333,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
372
333
  version: '0'
373
334
  requirements: []
374
335
  rubyforge_project:
375
- rubygems_version: 1.8.18
336
+ rubygems_version: 1.8.15
376
337
  signing_key:
377
338
  specification_version: 3
378
339
  summary: mass spectrometry proteomics, lipidomics, and tools