mspire 0.7.8 → 0.7.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -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