mspire 0.7.8 → 0.7.9
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/lib/mspire/mzml.rb +5 -1
- data/lib/mspire/mzml/data_array.rb +8 -1
- data/lib/mspire/peak.rb +8 -0
- data/lib/mspire/peak_list.rb +206 -136
- data/script/mzml_read_binary.rb +1 -1
- data/script/quant_compare_direct_injections.rb +110 -0
- data/spec/mspire/peak_list_spec.rb +189 -44
- metadata +32 -71
- data/mspire.gemspec +0 -236
data/script/mzml_read_binary.rb
CHANGED
@@ -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
|
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)
|
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
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
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
|
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
|
-
|
58
|
-
|
59
|
-
|
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
|
-
|
62
|
-
|
63
|
-
|
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
|
-
|
69
|
-
|
70
|
-
|
71
|
-
[[
|
72
|
-
|
73
|
-
|
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
|
-
|
76
|
-
|
77
|
-
|
78
|
-
[
|
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
|
-
#
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
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
|
-
|
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 = [[
|
95
|
-
list2 = [[
|
96
|
-
list3 = [[
|
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 '
|
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
|
107
|
-
data
|
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.
|
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-
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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.
|
336
|
+
rubygems_version: 1.8.15
|
376
337
|
signing_key:
|
377
338
|
specification_version: 3
|
378
339
|
summary: mass spectrometry proteomics, lipidomics, and tools
|