mspire 0.6.1 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -13,10 +13,11 @@ Jeweler::Tasks.new do |gem|
13
13
  gem.email = "jtprince@gmail.com"
14
14
  gem.authors = ["John T. Prince", "Simon Chiang"]
15
15
  gem.add_dependency "nokogiri", "~> 1.5"
16
+ gem.add_dependency "bsearch", ">= 1.5.0"
17
+ gem.add_dependency "obo", ">= 0.1.0"
16
18
  gem.add_development_dependency "rspec", "~> 2.6"
17
19
  gem.add_development_dependency "jeweler", "~> 1.5.2"
18
20
  gem.add_development_dependency "rcov", ">= 0"
19
- gem.add_development_dependency "obo", ">= 0.1.0"
20
21
  end
21
22
  Jeweler::RubygemsDotOrgTasks.new
22
23
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.1
1
+ 0.6.2
data/lib/ms/mass.rb CHANGED
@@ -16,6 +16,7 @@ module MS
16
16
  end.reduce(:+)
17
17
  end
18
18
 
19
+ ELECTRON = 0.0005486 # www.mikeblaber.org/oldwine/chm1045/notes/Atoms/.../Atoms03.htm
19
20
  H_PLUS = 1.00727646677
20
21
  # + http://www.unimod.org/masses.html
21
22
  MONO_STR = {
@@ -37,6 +38,7 @@ module MS
37
38
  'h' => 1.007825035, # +
38
39
  'h2o' => 18.0105647,
39
40
  'oh' => 17.002739665,
41
+ 'e' => 0.0005486,
40
42
  }
41
43
  AVG_STR = {
42
44
  'h+' => 1.007276, # using Mascot_H_plus mass (is this right for AVG??)
data/lib/ms/mzml.rb CHANGED
@@ -113,6 +113,9 @@ module MS
113
113
  base64 = binary_data_array_n.xpath('./binary').text
114
114
  MS::Mzml.unpack_binary(base64, accessions)
115
115
  end
116
+ # if there is no spectrum, we will still return a spectrum object, it
117
+ # just has no mzs or intensities
118
+ data_arrays = [[], []] if data_arrays.size == 0
116
119
  MS::Spectrum.new(data_arrays)
117
120
  end
118
121
 
data/lib/ms/spectrum.rb CHANGED
@@ -1,171 +1,134 @@
1
- module MS
2
- class Spectrum
3
- include Enumerable
4
-
5
- # The underlying data store.
6
- attr_reader :data
7
-
8
- # data takes an array: [mzs, intensities]
9
- # @return [MS::Spectrum]
10
- # @param [Array] data two element array of mzs and intensities
11
- def initialize(data)
12
- @data = data
13
- end
14
-
15
- def self.from_peaks(ar_of_doublets)
16
- _mzs = []
17
- _ints = []
18
- ar_of_doublets.each do |mz, int|
19
- _mzs << mz
20
- _ints << int
21
- end
22
- self.new([_mzs, _ints])
23
- end
24
-
25
- # found by querying the size of the data store. This should almost always
26
- # be 2 (m/z and intensities)
27
- def size
28
- @data.size
29
- end
30
-
31
- def ==(other)
32
- mzs == other.mzs && intensities == other.intensities
33
- end
34
-
35
- # An array of the mz data.
36
- def mzs
37
- @data[0]
38
- end
39
-
40
- # An array of the intensities data, corresponding to mzs.
41
- def intensities
42
- @data[1]
43
- end
44
-
45
- def mzs_and_intensities
46
- [@data[0], @data[1]]
47
- end
48
-
49
- # retrieve an m/z and intensity doublet at that index
50
- def [](array_index)
51
- [mzs[array_index], intensities[array_index]]
52
- end
53
-
54
- # yields(mz, inten) across the spectrum, or array of doublets if no block
55
- def peaks(&block)
56
- (m, i) = mzs_and_intensities
57
- m.zip(i, &block)
58
- end
59
-
60
- alias_method :each, :peaks
61
- alias_method :each_peak, :peaks
62
-
63
- # if the mzs and intensities are the same then the spectra are considered
64
- # equal
65
- def ==(other)
66
- mzs == other.mzs && intensities == other.intensities
67
- end
68
-
69
- # returns a new spectrum whose intensities have been normalized by the tic
70
- def normalize
71
- tic = self.intensities.inject(0.0) {|sum,int| sum += int }
72
- MS::Spectrum.new([self.mzs, self.intensities.map {|v| v / tic }])
73
- end
74
-
75
- ## uses index function and returns the intensity at that value
76
- #def intensity_at_mz(mz)
77
- #if x = index(mz)
78
- #intensities[x]
79
- #else
80
- #nil
81
- #end
82
- #end
83
-
84
- ## index mz, tolerance = :nearest(1), Float, :nearest_within_integer
85
-
86
- ## returns the index of the first value matching that m/z. the argument m/z
87
- ## may be less precise than the actual m/z (rounding to the same precision
88
- ## given) but must be at least integer precision (after rounding)
89
- ## implemented as binary search (bsearch from the web)
90
- #def index(mz)
91
- #mz_ar = mzs
92
- #return_val = nil
93
- #ind = mz_ar.bsearch_lower_boundary{|x| x <=> mz }
94
- #if mz_ar[ind] == mz
95
- #return_val = ind
96
- #else
97
- ## do a rounding game to see which one is it, or nil
98
- ## find all the values rounding to the same integer in the locale
99
- ## test each one fully in turn
100
- #mz = mz.to_f
101
- #mz_size = mz_ar.size
102
- #if ((ind < mz_size) and equal_after_rounding?(mz_ar[ind], mz))
103
- #return_val = ind
104
- #else # run the loop
105
- #up = ind
106
- #loop do
107
- #up += 1
108
- #if up >= mz_size
109
- #break
110
- #end
111
- #mz_up = mz_ar[up]
112
- #if (mz_up.ceil - mz.ceil >= 2)
113
- #break
114
- #else
115
- #if equal_after_rounding?(mz_up, mz)
116
- #return_val = up
117
- #return return_val
118
- #end
119
- #end
120
- #end
121
- #dn= ind
122
- #loop do
123
- #dn -= 1
124
- #if dn < 0
125
- #break
126
- #end
127
- #mz_dn = mz_ar[dn]
128
- #if (mz.floor - mz_dn.floor >= 2)
129
- #break
130
- #else
131
- #if equal_after_rounding?(mz_dn, mz)
132
- #return_val = dn
133
- #return return_val
134
- #end
135
- #end
136
- #end
137
- #end
138
- #end
139
- #return_val
140
- #end
141
-
142
- ## less_precise should be a float
143
- ## precise should be a float
144
- #def equal_after_rounding?(precise, less_precise) # :nodoc:
145
- ## determine the precision of less_precise
146
- #exp10 = precision_as_neg_int(less_precise)
147
- ##puts "EXP10: #{exp10}"
148
- #answ = ((precise*exp10).round == (less_precise*exp10).round)
149
- ##puts "TESTING FOR EQUAL: #{precise} #{less_precise}"
150
- ##puts answ
151
- #(precise*exp10).round == (less_precise*exp10).round
152
- #end
153
-
154
- ## returns 1 for ones place, 10 for tenths, 100 for hundredths
155
- ## to a precision exceeding 1e-6
156
- #def precision_as_neg_int(float) # :nodoc:
157
- #neg_exp10 = 1
158
- #loop do
159
- #over = float * neg_exp10
160
- #rounded = over.round
161
- #if (over - rounded).abs <= 1e-6
162
- #break
163
- #end
164
- #neg_exp10 *= 10
165
- #end
166
- #neg_exp10
167
- #end
168
-
169
-
170
- end
171
- end
1
+ require 'bsearch'
2
+
3
+ module MS
4
+ class Spectrum
5
+ include Enumerable
6
+
7
+ # The underlying data store. methods are implemented so that data[0] is
8
+ # the m/z's and data[1] is intensities
9
+ attr_reader :data
10
+
11
+ # data takes an array: [mzs, intensities]
12
+ # @return [MS::Spectrum]
13
+ # @param [Array] data two element array of mzs and intensities
14
+ def initialize(data)
15
+ @data = data
16
+ end
17
+
18
+ def self.from_peaks(ar_of_doublets)
19
+ _mzs = []
20
+ _ints = []
21
+ ar_of_doublets.each do |mz, int|
22
+ _mzs << mz
23
+ _ints << int
24
+ end
25
+ self.new([_mzs, _ints])
26
+ end
27
+
28
+ # found by querying the size of the data store. This should almost always
29
+ # be 2 (m/z and intensities)
30
+ def size
31
+ @data.size
32
+ end
33
+
34
+ def ==(other)
35
+ mzs == other.mzs && intensities == other.intensities
36
+ end
37
+
38
+ # An array of the mz data.
39
+ def mzs
40
+ @data[0]
41
+ end
42
+
43
+ # An array of the intensities data, corresponding to mzs.
44
+ def intensities
45
+ @data[1]
46
+ end
47
+
48
+ def mzs_and_intensities
49
+ [@data[0], @data[1]]
50
+ end
51
+
52
+ # retrieve an m/z and intensity doublet at that index
53
+ def [](array_index)
54
+ [@data[0][array_index], @data[1][array_index]]
55
+ end
56
+
57
+ # yields(mz, inten) across the spectrum, or array of doublets if no block
58
+ def peaks(&block)
59
+ @data[0].zip(@data[1], &block)
60
+ end
61
+
62
+ alias_method :each, :peaks
63
+ alias_method :each_peak, :peaks
64
+
65
+ # if the mzs and intensities are the same then the spectra are considered
66
+ # equal
67
+ def ==(other)
68
+ mzs == other.mzs && intensities == other.intensities
69
+ end
70
+
71
+ # returns a new spectrum whose intensities have been normalized by the tic
72
+ # of another given value
73
+ def normalize(norm_by=:tic)
74
+ norm_by = tic if norm_by == :tic
75
+ MS::Spectrum.new([self.mzs, self.intensities.map {|v| v / norm_by }])
76
+ end
77
+
78
+ def tic
79
+ self.intensities.reduce(:+)
80
+ end
81
+
82
+ # ensures that the m/z values are monotonically ascending (some
83
+ # instruments are bad about this)
84
+ # returns self
85
+ def sort!
86
+ _peaks = peaks.to_a
87
+ _peaks.sort!
88
+ _peaks.each_with_index {|(mz,int), i| @data[0][i] = mz ; @data[1][i] = int }
89
+ self
90
+ end
91
+
92
+ # returns the m/z that is closest to the value, favoring the lower m/z in
93
+ # the case of a tie. Uses a binary search.
94
+ def find_nearest(val)
95
+ mzs[find_nearest_index(val)]
96
+ end
97
+
98
+ # same as find_nearest but returns the index of the peak
99
+ def find_nearest_index(val)
100
+ find_all_nearest_index(val).first
101
+ end
102
+
103
+ def find_all_nearest_index(val)
104
+ _mzs = mzs
105
+ index = _mzs.bsearch_lower_boundary {|v| v <=> val }
106
+ if index == _mzs.size
107
+ [_mzs.size-1]
108
+ else
109
+ # if the previous m/z diff is smaller, use it
110
+ if index == 0
111
+ [index]
112
+ else
113
+ case (val - _mzs[index-1]).abs <=> (_mzs[index] - val).abs
114
+ when -1
115
+ [index-1]
116
+ when 0
117
+ [index-1, index]
118
+ when 1
119
+ [index]
120
+ end
121
+ end
122
+ end
123
+ end
124
+
125
+ def find_all_nearest(val)
126
+ find_all_nearest_index(val).map {|i| mzs[i] }
127
+ end
128
+
129
+ end
130
+ end
131
+
132
+
133
+
134
+
@@ -10,12 +10,11 @@ require 'ms/ident/pepxml/search_hit'
10
10
  require 'ms/ident/pepxml/search_hit/modification_info'
11
11
 
12
12
  describe "creating an MS::Ident::Pepxml" do
13
- include MS::Ident
14
13
 
15
14
  it "can be creating in a nested fashion reflecting internal structure" do
16
15
  tags_that_should_be_present = %w(msms_pipeline_analysis msms_run_summary sample_enzyme search_summary spectrum_query search_result search_hit modification_info mod_aminoacid_mass search_score)
17
16
 
18
- pepxml = Pepxml.new do |msms_pipeline_analysis|
17
+ pepxml = MS::Ident::Pepxml.new do |msms_pipeline_analysis|
19
18
  msms_pipeline_analysis.merge!(:summary_xml => "020.xml") do |msms_run_summary|
20
19
  # prep the sample enzyme and search_summary
21
20
  msms_run_summary.merge!(
@@ -39,16 +38,16 @@ describe "creating an MS::Ident::Pepxml" do
39
38
  :max_num_internal_cleavages => 2,
40
39
  :min_number_termini => 2
41
40
  )
42
- modifications << Pepxml::AminoacidModification.new(
41
+ modifications << MS::Ident::Pepxml::AminoacidModification.new(
43
42
  :aminoacid => 'M', :massdiff => 15.9994, :mass => MS::Mass::AA::MONO['M']+15.9994,
44
43
  :variable => 'Y', :symbol => '*')
45
44
  # invented, for example, a protein terminating mod
46
- modifications << Pepxml::TerminalModification.new(
45
+ modifications << MS::Ident::Pepxml::TerminalModification.new(
47
46
  :terminus => 'c', :massdiff => 23.3333, :mass => MS::Mass::MONO['oh'] + 23.3333,
48
47
  :variable => 'Y', :symbol => '[', :protein_terminus => 'c',
49
48
  :description => 'leave protein_terminus off if not protein mod'
50
49
  )
51
- modifications << Pepxml::TerminalModification.new(
50
+ modifications << MS::Ident::Pepxml::TerminalModification.new(
52
51
  :terminus => 'c', :massdiff => 25.42322, :mass => MS::Mass::MONO['h+'] + 25.42322,
53
52
  :variable => 'N', :symbol => ']', :description => 'example: c term mod'
54
53
  )
@@ -58,18 +57,18 @@ describe "creating an MS::Ident::Pepxml" do
58
57
  :enzyme_info => 'Trypsin(KR/P) 1 1 KR P', # etc....
59
58
  )
60
59
  end
61
- spectrum_query1 = Pepxml::SpectrumQuery.new(
60
+ spectrum_query1 = MS::Ident::Pepxml::SpectrumQuery.new(
62
61
  :spectrum => '020.3.3.1', :start_scan => 3, :end_scan => 3,
63
62
  :precursor_neutral_mass => 1120.93743421875, :assumed_charge => 1
64
63
  ) do |search_results|
65
- search_result1 = Pepxml::SearchResult.new do |search_hits|
64
+ search_result1 = MS::Ident::Pepxml::SearchResult.new do |search_hits|
66
65
  modpositions = [[1, 243.1559], [6, 167.0581], [7,181.085]].map do |pair|
67
- Pepxml::SearchHit::ModificationInfo::ModAminoacidMass.new(*pair)
66
+ MS::Ident::Pepxml::SearchHit::ModificationInfo::ModAminoacidMass.new(*pair)
68
67
  end
69
68
  # order(modified_peptide, mod_aminoacid_masses, :mod_nterm_mass, :mod_cterm_mass)
70
69
  # or can be set by hash
71
- mod_info = Pepxml::SearchHit::ModificationInfo.new('Y#RLGGS#T#K', modpositions)
72
- search_hit1 = Pepxml::SearchHit.new(
70
+ mod_info = MS::Ident::Pepxml::SearchHit::ModificationInfo.new('Y#RLGGS#T#K', modpositions)
71
+ search_hit1 = MS::Ident::Pepxml::SearchHit.new(
73
72
  :hit_rank=>1, :peptide=>'YRLGGSTK', :peptide_prev_aa => "R", :peptide_next_aa => "K",
74
73
  :protein => "gi|16130113|ref|NP_416680.1|", :num_tot_proteins => 1, :num_matched_ions => 5,
75
74
  :tot_num_ions => 35, :calc_neutral_pep_mass => 1120.93163442, :massdiff => 0.00579979875010395,
@@ -22,12 +22,12 @@ describe 'converting mzml to plms1' do
22
22
  plms1.times.should == times
23
23
  plms1.scan_numbers.should == scan_nums
24
24
  plms1.spectra.each do |spec|
25
- p spec.size
26
- p spec.class
27
- p spec.mzs
28
- p spec.intensities
25
+ spec.size.should == 2
26
+ spec.class.should == MS::Spectrum
27
+ spec.mzs.should == []
28
+ spec.intensities.should == []
29
29
  end
30
- plms1.write("tmp.tmp.bin")
30
+ #plms1.write("tmp.tmp.bin")
31
31
  end
32
32
 
33
33
  end
@@ -47,13 +47,14 @@ describe 'converting mzml to plms1' do
47
47
  #times =[6604.58, 6605.5, 6605.91, 6606.48, 6606.98, 6607.53, 6607.93, 6608.49, 6608.92, 6609.49, 6609.94, 6610.53]
48
48
  plms1 = @mzml.to_plms1
49
49
  plms1.spectra.respond_to?(:each).should be_true
50
- p plms1.times
51
- p plms1.scan_numbers
52
- plms1.spectra.each do |spec|
53
- p spec.size
54
- p spec.class
55
- p spec.mzs.size
56
- p spec.intensities.size
50
+ plms1.times.should == [1981.5726, 1982.1077, 1982.4020999999998]
51
+ plms1.scan_numbers.should == [1, 2, 3]
52
+ sizes = [20168, 315, 634]
53
+ plms1.spectra.zip(sizes).each do |spec,exp_size|
54
+ spec.class.should == MS::Spectrum
55
+ spec.size.should == 2
56
+ spec.mzs.size.should == exp_size
57
+ spec.intensities.size.should == exp_size
57
58
  end
58
59
  #plms1.write("tmp.tmp.bin")
59
60
  end
@@ -5,17 +5,17 @@ require 'csv'
5
5
 
6
6
  describe 'running qspec' do
7
7
  before do
8
- @file = TESTFILES + '/ms/quant/max_quant_output.txt'
9
- rows = IO.readlines(@file).map {|line| line.chomp.split("\t") }
10
- p rows.map(&:size)
11
- abort 'here'
12
- #columns = IO.readlines(@file).map {|line| line.split("\t") }.transpose
13
- headers = columns.map(&:first)
14
- p headers
8
+ #@file = TESTFILES + '/ms/quant/max_quant_output.txt'
9
+ #rows = IO.readlines(@file).map {|line| line.chomp.split("\t") }
10
+ #p rows.map(&:size)
11
+ #abort 'here'
12
+ ##columns = IO.readlines(@file).map {|line| line.split("\t") }.transpose
13
+ #headers = columns.map(&:first)
14
+ #p headers
15
15
  end
16
16
 
17
17
  describe 'on spectral count data' do
18
- it 'works' do
18
+ xit 'works' do
19
19
  1.should == 1
20
20
  end
21
21
  end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ require 'ms/spectrum'
4
+
5
+ describe MS::Spectrum do
6
+
7
+ describe 'useful utilities' do
8
+ subject { MS::Spectrum.new [ [10.1, 10.5, 10.7, 11.5], [1, 2, 3, 4] ] }
9
+ it 'finds the nearest m/z or index' do
10
+
11
+ queries = {
12
+ 10.4 => 1,
13
+ 10.5 => 1,
14
+ 10.6 => 1,
15
+ 10.61 => 2,
16
+ -100.0 => 0,
17
+ 200.0 => 3,
18
+ }
19
+ queries.each {|mz, exp_i| subject.find_nearest_index(mz).should == exp_i }
20
+
21
+ all = Hash[ queries.map {|k,v| [k,[v]] } ]
22
+ all[10.6] = [1,2]
23
+ all.each {|mz, exp_mz| subject.find_all_nearest_index(mz).should == exp_mz }
24
+
25
+ queries = {
26
+ 10.4 => 10.5,
27
+ 10.5 => 10.5,
28
+ 10.6 => 10.5,
29
+ 10.61 => 10.7,
30
+ -100.0 => 10.1,
31
+ 200.0 => 11.5,
32
+ }
33
+ queries.each {|mz, exp_mz| subject.find_nearest(mz).should == exp_mz }
34
+
35
+ all = Hash[ queries.map {|k,v| [k,[v]] } ]
36
+ all[10.6] = [10.5, 10.7]
37
+ all.each {|mz, exp_mz| subject.find_all_nearest(mz).should == exp_mz }
38
+ end
39
+
40
+ it 'can sort itself by m/z' do
41
+ spec = MS::Spectrum.new [[10.5, 10.1, 11.5, 10.7], [2, 1, 4, 3]]
42
+ spec.sort!
43
+ spec.mzs.should == subject.mzs
44
+ spec.intensities.should == subject.intensities
45
+ end
46
+ end
47
+
48
+ end
data/spec/spec_helper.rb CHANGED
@@ -13,8 +13,8 @@ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
13
13
  RSpec.configure do |config|
14
14
  config.color_enabled = true
15
15
  config.tty = true
16
- #config.formatter = :documentation # :progress, :html, :textmate
17
- config.formatter = :progress # :progress, :html, :textmate
16
+ config.formatter = :documentation # :progress, :html, :textmate
17
+ #config.formatter = :progress # :progress, :html, :textmate
18
18
  end
19
19
 
20
20
 
metadata CHANGED
@@ -1,83 +1,92 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: mspire
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.6.2
4
5
  prerelease:
5
- version: 0.6.1
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - John T. Prince
9
9
  - Simon Chiang
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
-
14
- date: 2012-01-25 00:00:00 Z
15
- dependencies:
16
- - !ruby/object:Gem::Dependency
13
+ date: 2012-02-02 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
17
16
  name: nokogiri
18
- prerelease: false
19
- requirement: &id001 !ruby/object:Gem::Requirement
17
+ requirement: &8784820 !ruby/object:Gem::Requirement
20
18
  none: false
21
- requirements:
19
+ requirements:
22
20
  - - ~>
23
- - !ruby/object:Gem::Version
24
- version: "1.5"
21
+ - !ruby/object:Gem::Version
22
+ version: '1.5'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *8784820
26
+ - !ruby/object:Gem::Dependency
27
+ name: bsearch
28
+ requirement: &8782400 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: 1.5.0
25
34
  type: :runtime
26
- version_requirements: *id001
27
- - !ruby/object:Gem::Dependency
28
- name: rspec
29
35
  prerelease: false
30
- requirement: &id002 !ruby/object:Gem::Requirement
36
+ version_requirements: *8782400
37
+ - !ruby/object:Gem::Dependency
38
+ name: obo
39
+ requirement: &8781260 !ruby/object:Gem::Requirement
31
40
  none: false
32
- requirements:
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: 0.1.0
45
+ type: :runtime
46
+ prerelease: false
47
+ version_requirements: *8781260
48
+ - !ruby/object:Gem::Dependency
49
+ name: rspec
50
+ requirement: &8780220 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
33
53
  - - ~>
34
- - !ruby/object:Gem::Version
35
- version: "2.6"
54
+ - !ruby/object:Gem::Version
55
+ version: '2.6'
36
56
  type: :development
37
- version_requirements: *id002
38
- - !ruby/object:Gem::Dependency
39
- name: jeweler
40
57
  prerelease: false
41
- requirement: &id003 !ruby/object:Gem::Requirement
58
+ version_requirements: *8780220
59
+ - !ruby/object:Gem::Dependency
60
+ name: jeweler
61
+ requirement: &8795440 !ruby/object:Gem::Requirement
42
62
  none: false
43
- requirements:
63
+ requirements:
44
64
  - - ~>
45
- - !ruby/object:Gem::Version
65
+ - !ruby/object:Gem::Version
46
66
  version: 1.5.2
47
67
  type: :development
48
- version_requirements: *id003
49
- - !ruby/object:Gem::Dependency
50
- name: rcov
51
68
  prerelease: false
52
- requirement: &id004 !ruby/object:Gem::Requirement
69
+ version_requirements: *8795440
70
+ - !ruby/object:Gem::Dependency
71
+ name: rcov
72
+ requirement: &8792600 !ruby/object:Gem::Requirement
53
73
  none: false
54
- requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- version: "0"
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
58
78
  type: :development
59
- version_requirements: *id004
60
- - !ruby/object:Gem::Dependency
61
- name: obo
62
79
  prerelease: false
63
- requirement: &id005 !ruby/object:Gem::Requirement
64
- none: false
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: 0.1.0
69
- type: :development
70
- version_requirements: *id005
71
- description: mass spectrometry proteomics, lipidomics, and tools, a rewrite of mspire, merging of ms-* gems
80
+ version_requirements: *8792600
81
+ description: mass spectrometry proteomics, lipidomics, and tools, a rewrite of mspire,
82
+ merging of ms-* gems
72
83
  email: jtprince@gmail.com
73
84
  executables: []
74
-
75
85
  extensions: []
76
-
77
- extra_rdoc_files:
86
+ extra_rdoc_files:
78
87
  - LICENSE
79
88
  - README.rdoc
80
- files:
89
+ files:
81
90
  - LICENSE
82
91
  - README.rdoc
83
92
  - Rakefile
@@ -147,6 +156,7 @@ files:
147
156
  - spec/ms/mzml_spec.rb
148
157
  - spec/ms/plms1_spec.rb
149
158
  - spec/ms/quant/qspec_spec.rb
159
+ - spec/ms/spectrum_spec.rb
150
160
  - spec/msplat_spec.rb
151
161
  - spec/obo_spec.rb
152
162
  - spec/spec_helper.rb
@@ -175,31 +185,28 @@ files:
175
185
  - spec/testfiles/ms/quant/unlog_transform.rb
176
186
  - spec/testfiles/plms1/output.key
177
187
  homepage: http://github.com/princelab/mspire
178
- licenses:
188
+ licenses:
179
189
  - MIT
180
190
  post_install_message:
181
191
  rdoc_options: []
182
-
183
- require_paths:
192
+ require_paths:
184
193
  - lib
185
- required_ruby_version: !ruby/object:Gem::Requirement
194
+ required_ruby_version: !ruby/object:Gem::Requirement
186
195
  none: false
187
- requirements:
188
- - - ">="
189
- - !ruby/object:Gem::Version
190
- version: "0"
191
- required_rubygems_version: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - ! '>='
198
+ - !ruby/object:Gem::Version
199
+ version: '0'
200
+ required_rubygems_version: !ruby/object:Gem::Requirement
192
201
  none: false
193
- requirements:
194
- - - ">="
195
- - !ruby/object:Gem::Version
196
- version: "0"
202
+ requirements:
203
+ - - ! '>='
204
+ - !ruby/object:Gem::Version
205
+ version: '0'
197
206
  requirements: []
198
-
199
207
  rubyforge_project:
200
- rubygems_version: 1.8.10
208
+ rubygems_version: 1.8.15
201
209
  signing_key:
202
210
  specification_version: 3
203
211
  summary: mass spectrometry proteomics, lipidomics, and tools
204
212
  test_files: []
205
-