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.
- 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
|