mspire 0.7.9 → 0.7.10

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.9
1
+ 0.7.10
@@ -1,10 +1,17 @@
1
+ require 'mspire/molecular_formula'
2
+
3
+ module Mspire
4
+ class MolecularFormula < Hash
5
+ end
6
+ end
7
+
1
8
 
2
9
  module Mspire
3
10
  class Isotope
4
11
  module AA
5
12
  # These represent counts for the individual residues (i.e., no extra H
6
13
  # and OH on the ends)
7
- ATOM_COUNTS_STR = {
14
+ aa_to_el_hash = {
8
15
  'A' => { :c =>3, :h =>5 , :o =>1 , :n =>1 , :s =>0 , :p =>0, :se =>0 },
9
16
  'R' => { :c =>6, :h =>12 , :o =>1 , :n =>4 , :s =>0 , :p =>0, :se =>0 },
10
17
  'N' => { :c =>4, :h =>6 , :o =>2 , :n =>2 , :s =>0 , :p =>0, :se =>0 },
@@ -28,11 +35,20 @@ module Mspire
28
35
  'U' => { :c =>3, :h =>5 , :o =>1 , :n =>1 , :s =>0 , :p =>0, :se =>1 },
29
36
  'O' => { :c =>12, :h =>19 , :o =>2 , :n =>3 , :s =>0 , :p =>0, :se =>0 }
30
37
  }
31
- ATOM_COUNTS_SYM = Hash[ATOM_COUNTS_STR.map {|k,v| [k.to_sym, v] }]
32
38
 
33
- # string and symbol access of amino acid (atoms are all lower case
34
- # symbols)
35
- ATOM_COUNTS = ATOM_COUNTS_SYM.merge ATOM_COUNTS_STR
39
+ #
40
+ FORMULAS_STR = Hash[
41
+ aa_to_el_hash.map {|k,v| [k, Mspire::MolecularFormula.new(v)] }
42
+ ]
43
+
44
+ FORMULAS_SYM = Hash[FORMULAS_STR.map {|k,v| [k.to_sym, v] }]
45
+
46
+ # string and symbol access of amino acid residues (amino acids are
47
+ # accessed upper case and atoms are all lower case symbols)
48
+ FORMULAS = FORMULAS_SYM.merge FORMULAS_STR
49
+
50
+ # an alias for FORMULAS
51
+ ATOM_COUNTS = FORMULAS
36
52
  end
37
53
  end
38
54
  end
@@ -3,6 +3,7 @@ require 'mspire/mass'
3
3
  module Mspire
4
4
  module Mass
5
5
  module AA
6
+
6
7
  # amino_acids keys as strings, average masses
7
8
  AVG_STRING = {
8
9
  "*"=>118.88603,
@@ -32,6 +33,7 @@ module Mspire
32
33
  "Y"=>163.17326,
33
34
  "Z"=>128.6231
34
35
  }
36
+
35
37
  # amino_acids keys as strings, monoisotopic masses
36
38
  MONO_STRING = {
37
39
  "*"=>118.805716,
@@ -69,10 +71,11 @@ module Mspire
69
71
  AVG_SYM = Hash[AVG_STRING.map {|aa,mass| [aa.to_sym, mass] } ]
70
72
 
71
73
  # Monoisotopic amino acid masses keyed as symbols and also strings (all
72
- # upper case). Also includes Mspire::Mass::MONO for things like protons ('h+')
74
+ # upper case). Also includes Mspire::Mass::MONO for things like protons ('h+' and 'h2o')
73
75
  MONO = MONO_SYM.merge(MONO_STRING).merge(Mspire::Mass::MONO)
76
+
74
77
  # Average amino acid masses keyed as symbols and also strings (all
75
- # uppder case). Also includes Mspire::Mass::AVG for things like protons ('h+')
78
+ # uppder case). Also includes Mspire::Mass::AVG for things like protons ('h+' and 'h2o')
76
79
  AVG = AVG_SYM.merge(AVG_STRING).merge(Mspire::Mass::AVG)
77
80
  end
78
81
  end
data/lib/mspire/mass.rb CHANGED
@@ -16,6 +16,7 @@ module Mspire
16
16
  'e' => 0.0005486, # www.mikeblaber.org/oldwine/chm1045/notes/Atoms/.../Atoms03.htm
17
17
  'neutron' => 1.0086649156,
18
18
  }
19
+
19
20
  Mspire::Isotope::BY_ELEMENT.each do |el, isotopes|
20
21
  MONO_STR[el.to_s] = isotopes.find {|iso| iso.mono }.atomic_mass
21
22
  end
@@ -25,7 +25,7 @@ module Mspire
25
25
 
26
26
  def self.from_aaseq(aaseq)
27
27
  hash = aaseq.each_char.inject({}) do |hash,aa|
28
- hash.merge(Mspire::Isotope::AA::ATOM_COUNTS[aa]) {|h,o,n| (o ? o : 0) +n }
28
+ hash.merge(Mspire::Isotope::AA::FORMULAS[aa]) {|h,o,n| (o ? o : 0) +n }
29
29
  end
30
30
  hash[:h] += 2
31
31
  hash[:o] += 1
@@ -0,0 +1,146 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'optparse'
4
+ require 'open-uri'
5
+ require 'cgi'
6
+
7
+ # see http://www.uniprot.org/faq/28
8
+
9
+ # here are some example human files (tax ID = 9606)
10
+ # CANONICAL SEQUENCES:
11
+ # http://www.uniprot.org/uniprot/?query=taxonomy:9606&force=yes&format=fasta
12
+ # URL SAFE:
13
+ # http://www.uniprot.org/uniprot/?query=taxonomy%3a9606&force=yes&format=fasta
14
+
15
+ # CANONICAL + VARIANTS:
16
+ # http://www.uniprot.org/uniprot/?query=taxonomy:9606&force=yes&format=fasta&include=yes
17
+ # URL SAFE: http://www.uniprot.org/uniprot/?query=taxonomy%3a9606&force=yes&format=fasta&include=yes
18
+
19
+
20
+ FORMATS = %w(fasta gff xls tab txt xml rdf list)
21
+ # list is just a list of accession numbers
22
+
23
+ # include includes sequence variants (otherwise canonical)
24
+ args = { :format => FORMATS.first, :force => 'yes', :include => 'yes', :compress => 'yes' }
25
+ # force just makes the file a download (matters for browsers)
26
+
27
+ # queries are in this format:
28
+ # query=organism:9606+AND+organelle:mitochondrion
29
+
30
+ #[OC] taxonomy
31
+ #[OG] organelle
32
+
33
+ TAXONOMY_BROWSER_URL = "http://www.ncbi.nlm.nih.gov/Taxonomy/taxonomyhome.html/index.cgi"
34
+
35
+ =begin
36
+ Y is a mnemonic species identification code of at most 5 alphanumeric
37
+ characters representing the biological source of the protein. This
38
+ code is generally made of the first three letters of the genus and
39
+ the first two letters of the species. Examples: PSEPU is for
40
+ Pseudomonas putida and NAJNI is for Naja nivea.
41
+
42
+ However, for species commonly encountered in the data bank, self-
43
+ explanatory codes are used. There are 16 of those codes. They are:
44
+ BOVIN for Bovine, CHICK for Chicken, ECOLI for Escherichia coli,
45
+ HORSE for Horse, HUMAN for Human, MAIZE for Maize (Zea mays) , MOUSE
46
+ for Mouse, PEA for Garden pea (Pisum sativum), PIG for Pig, RABIT
47
+ for Rabbit, RAT for Rat, SHEEP for Sheep, SOYBN for Soybean (Glycine
48
+ max), TOBAC for Common tobacco (Nicotina tabacum), WHEAT for Wheat
49
+ (Triticum aestivum), YEAST for Baker's yeast (Saccharomyces
50
+ cerevisiae).
51
+
52
+ BOVIN
53
+ CHICK
54
+ ECOLI
55
+ HORSE
56
+ HUMAN
57
+ MAIZE
58
+ MOUSE
59
+ PEA
60
+ PIG
61
+ RABIT
62
+ RAT
63
+ SHEEP
64
+ SOYBN
65
+ TOBAC
66
+ WHEAT
67
+ YEAST
68
+
69
+ =end
70
+
71
+ TAXONOMY_IDS =
72
+ { :human => [9606, 'Homo sapiens'],
73
+ :mouse => [10090, 'Mus musculus'],
74
+ :yeast => [4932, 'Saccharomyces cerevisiae'],
75
+ :ecoli => [562, 'Escherichia coli'],
76
+ :caeel => [6239, 'Caenorhabditis elegans'],
77
+ :drome => [7227, 'Drosophila melanogaster'],
78
+ :grpln => [33090, 'Viridiplantae'],
79
+ }
80
+
81
+ def list_taxonomies
82
+ puts " Key ID Genus/Species"
83
+ puts " ===== ===== ============="
84
+ puts( TAXONOMY_IDS.map {|k,v| " %s %6d %s" % [k,*v] }.join("\n") )
85
+ puts ""
86
+ puts "See #{TAXONOMY_BROWSER_URL}"
87
+ true
88
+ end
89
+
90
+ opts = OptionParser.new do |op|
91
+ op.banner = "usage: #{File.basename(__FILE__)} <5-Letter-Species-Name|taxID>"
92
+ op.separator ""
93
+ op.separator " requires 5-letter key (Swiss-Prot Mnemonic) (-l to see list)"
94
+ op.separator " (note that outside the core ~12, these are just made up)"
95
+ op.separator " or the actual NCBI taxonomy ID"
96
+ op.separator " [add your key to TAXONOMY_IDS if you want]"
97
+ op.separator ""
98
+ op.on("-l", "--list-species", "lists available species and exits") { list_taxonomies && exit }
99
+ op.on("-c", "--canonical", "don't include sequence variants") { args[:include] = 'no' }
100
+ op.on("--no-compress", "don't compress the file") { args[:compress] = 'no' }
101
+ op.on("-f", "--format <string>", "Format type. One of (1st is default):", " #{FORMATS.join(' ')}") do |v|
102
+ raise ArgumentError, "format needs to be one of: #{FORMATS.join(' ')}" unless FORMATS.include?(v)
103
+ args[:format] = v
104
+ end
105
+ op.on("-v", "--verbose", "talk about it") { $VERBOSE = true }
106
+ end
107
+
108
+ opts.parse!
109
+
110
+ if ARGV.size == 0
111
+ puts opts
112
+ exit
113
+ end
114
+
115
+ mnemonic = ARGV.shift
116
+ # use the taxonomy id if exists, otherwise use the tax ID itself
117
+ tax_id =
118
+ if val = TAXONOMY_IDS[mnemonic.to_sym]
119
+ val.first
120
+ else
121
+ mnemonic
122
+ end
123
+ args[:query] = "taxonomy:#{tax_id}"
124
+
125
+ base_url = "http://www.uniprot.org/uniprot/?"
126
+ query_string = args.map {|k,v| [k,CGI.escape(v)].join('=') }.join("&")
127
+
128
+ url = base_url + query_string
129
+
130
+ prefix = "uni"
131
+ variants = (args[:include] == 'yes') ? 'var' : 'can'
132
+ short_date = Time.now.strftime("%y%m%d")
133
+ decoytype = "fwd"
134
+ postfix = ".fasta"
135
+
136
+ filename = [prefix, mnemonic, variants, short_date, decoytype].join("_") << postfix
137
+ (filename << ".gz") if args[:compress] == 'yes'
138
+ puts "reading from url : #{url}"
139
+ puts "writing to file : #{filename}"
140
+ File.open(filename,'w') do |out|
141
+ open(url) do |io|
142
+ out.print( io.read )
143
+ end
144
+ end
145
+
146
+
@@ -5,11 +5,21 @@ require 'mspire/mzml'
5
5
  require 'mspire/peak_list'
6
6
  require 'mspire/peak'
7
7
 
8
+ def putsv(*args)
9
+ if $VERBOSE
10
+ puts(*args)
11
+ end
12
+ end
13
+
8
14
  DEFAULT_OUTFILE = "quant_compare.tsv"
9
15
 
10
16
  DEFAULTS = {
11
17
  :bin_width => Mspire::PeakList::DEFAULT_MERGE[:bin_width],
12
18
  :bin_unit => Mspire::PeakList::DEFAULT_MERGE[:bin_unit],
19
+ :split => Mspire::PeakList::DEFAULT_MERGE[:split],
20
+ :round_mz => 6,
21
+ :round_intensity => 6,
22
+ :mz_prefix => "mz"
13
23
  }
14
24
 
15
25
  parser = Trollop::Parser.new do
@@ -19,11 +29,18 @@ parser = Trollop::Parser.new do
19
29
  opt :outfile, "write results to this file", :default => DEFAULT_OUTFILE
20
30
  opt :bin_width, "width of the bins for merging", :default => DEFAULTS[:bin_width]
21
31
  opt :bin_unit, "units for binning (ppm or amu)", :default => DEFAULTS[:bin_unit].to_s
32
+ opt :split, "share|greedy_y|zero method used to distinguish peaks", :default => DEFAULTS[:split].to_s
22
33
  opt :sample_ids, "a yml file pointing basename to id", :type => :string
34
+ opt :mz_prefix, "use this prefix for mz values", :default => DEFAULTS[:mz_prefix]
35
+ opt :round_mz, "round the final m/z values to this place", :default => DEFAULTS[:round_mz]
36
+ opt :round_intensity, "round the final int values to this place", :default => DEFAULTS[:round_intensity]
37
+ opt :verbose, "talk about it"
23
38
  end
24
39
 
25
40
  opts = parser.parse(ARGV)
26
41
  opts[:bin_unit] = opts[:bin_unit].to_sym
42
+ opts[:split] = opts[:split].to_sym
43
+ $VERBOSE = opts.delete(:verbose)
27
44
 
28
45
  if ARGV.size == 0
29
46
  parser.educate
@@ -36,6 +53,14 @@ class TracedPeak < Array
36
53
  # the intensity or y value
37
54
  alias_method :y, :last
38
55
 
56
+ def x=(val)
57
+ self[0] = val
58
+ end
59
+
60
+ def y=(val)
61
+ self[2] = val
62
+ end
63
+
39
64
  def initialize(data, sample_id)
40
65
  self[0] = data.first
41
66
  self[1] = sample_id
@@ -63,7 +88,7 @@ index_to_sample_id = {}
63
88
  sample_ids = files.each_with_index.map do |filename,index|
64
89
  basename = filename.chomp(File.extname(filename))
65
90
  sample_id = basename_to_sample_id ? basename_to_sample_id[basename] : basename
66
- puts "processing: #{filename}"
91
+ putsv "processing: #{filename}"
67
92
  Mspire::Mzml.open(filename) do |mzml|
68
93
  mzml.each_with_index do |spec,i|
69
94
  if spec.ms_level == 1
@@ -80,31 +105,32 @@ sample_ids = files.each_with_index.map do |filename,index|
80
105
  sample_id
81
106
  end
82
107
 
83
- puts "gathered #{peaklist.size} peaks!"
108
+ putsv "gathered #{peaklist.size} peaks!"
84
109
 
85
- puts "sorting all peaks"
110
+ putsv "sorting all peaks"
86
111
  peaklist.sort!
87
112
 
88
- puts "merging peaks"
89
- #share_method = :greedy_y
90
- share_method = :share
113
+ putsv "merging peaks"
114
+ share_method = :greedy_y
115
+ #share_method = :share
116
+
91
117
 
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
118
+ peaks, data = Mspire::PeakList.merge([peaklist], opts.merge( {:split => share_method, :return_data => true} ))
96
119
 
97
120
  File.open(opts[:outfile],'w') do |out|
98
121
 
99
122
  header = ["mzs", *sample_ids]
100
123
  out.puts header.join("\t")
101
124
 
102
- data.each do |bucket_of_peaks|
125
+ data.zip(peaks) do |bucket_of_peaks, meta_peak|
126
+
103
127
  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] }]
128
+ bucket_of_peaks.each do |peak|
129
+ signal_by_sample_index[peak.sample_id] += peak.y
130
+ end
131
+
132
+ row = [opts[:mz_prefix] + meta_peak.x.round(opts[:round_mz]).to_s, *sample_ids.each_with_index.map {|id,index| signal_by_sample_index[index].round(opts[:round_intensity]) }]
106
133
  out.puts row.join("\t")
107
134
  end
108
135
  end
109
136
 
110
-
@@ -8,12 +8,12 @@ describe 'accessing an amino acid atom count' do
8
8
  end
9
9
 
10
10
  it 'residue can be accessed with a symbol' do
11
- hash = Mspire::Isotope::AA::ATOM_COUNTS[:A]
11
+ hash = Mspire::Isotope::AA::FORMULAS[:A]
12
12
  [:c, :h, :o, :n, :s].each {|key| hash[key].should == @alanine[key] }
13
13
  end
14
14
 
15
15
  it 'residue can be accessed with a string' do
16
- hash = Mspire::Isotope::AA::ATOM_COUNTS['A']
16
+ hash = Mspire::Isotope::AA::FORMULAS['A']
17
17
  [:c, :h, :o, :n, :s].each {|key| hash[key].should == @alanine[key] }
18
18
  end
19
19
 
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.9
4
+ version: 0.7.10
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-04-14 00:00:00.000000000 Z
13
+ date: 2012-04-19 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: nokogiri
17
- requirement: &23083440 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,10 +22,15 @@ dependencies:
22
22
  version: '1.5'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *23083440
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ version: '1.5'
26
31
  - !ruby/object:Gem::Dependency
27
32
  name: bsearch
28
- requirement: &23080720 !ruby/object:Gem::Requirement
33
+ requirement: !ruby/object:Gem::Requirement
29
34
  none: false
30
35
  requirements:
31
36
  - - ! '>='
@@ -33,10 +38,15 @@ dependencies:
33
38
  version: 1.5.0
34
39
  type: :runtime
35
40
  prerelease: false
36
- version_requirements: *23080720
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: 1.5.0
37
47
  - !ruby/object:Gem::Dependency
38
48
  name: andand
39
- requirement: &23078680 !ruby/object:Gem::Requirement
49
+ requirement: !ruby/object:Gem::Requirement
40
50
  none: false
41
51
  requirements:
42
52
  - - ! '>='
@@ -44,10 +54,15 @@ dependencies:
44
54
  version: 1.3.1
45
55
  type: :runtime
46
56
  prerelease: false
47
- version_requirements: *23078680
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: 1.3.1
48
63
  - !ruby/object:Gem::Dependency
49
64
  name: obo
50
- requirement: &23076600 !ruby/object:Gem::Requirement
65
+ requirement: !ruby/object:Gem::Requirement
51
66
  none: false
52
67
  requirements:
53
68
  - - ! '>='
@@ -55,10 +70,15 @@ dependencies:
55
70
  version: 0.1.0
56
71
  type: :runtime
57
72
  prerelease: false
58
- version_requirements: *23076600
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: 0.1.0
59
79
  - !ruby/object:Gem::Dependency
60
80
  name: builder
61
- requirement: &23074560 !ruby/object:Gem::Requirement
81
+ requirement: !ruby/object:Gem::Requirement
62
82
  none: false
63
83
  requirements:
64
84
  - - ~>
@@ -66,10 +86,15 @@ dependencies:
66
86
  version: 3.0.0
67
87
  type: :runtime
68
88
  prerelease: false
69
- version_requirements: *23074560
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ~>
93
+ - !ruby/object:Gem::Version
94
+ version: 3.0.0
70
95
  - !ruby/object:Gem::Dependency
71
96
  name: bio
72
- requirement: &23073060 !ruby/object:Gem::Requirement
97
+ requirement: !ruby/object:Gem::Requirement
73
98
  none: false
74
99
  requirements:
75
100
  - - ~>
@@ -77,10 +102,15 @@ dependencies:
77
102
  version: 1.4.2
78
103
  type: :runtime
79
104
  prerelease: false
80
- version_requirements: *23073060
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: 1.4.2
81
111
  - !ruby/object:Gem::Dependency
82
112
  name: trollop
83
- requirement: &23071860 !ruby/object:Gem::Requirement
113
+ requirement: !ruby/object:Gem::Requirement
84
114
  none: false
85
115
  requirements:
86
116
  - - ~>
@@ -88,10 +118,15 @@ dependencies:
88
118
  version: 1.16.2
89
119
  type: :runtime
90
120
  prerelease: false
91
- version_requirements: *23071860
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ~>
125
+ - !ruby/object:Gem::Version
126
+ version: 1.16.2
92
127
  - !ruby/object:Gem::Dependency
93
128
  name: uuid
94
- requirement: &23070700 !ruby/object:Gem::Requirement
129
+ requirement: !ruby/object:Gem::Requirement
95
130
  none: false
96
131
  requirements:
97
132
  - - ! '>='
@@ -99,10 +134,15 @@ dependencies:
99
134
  version: 2.3.5
100
135
  type: :runtime
101
136
  prerelease: false
102
- version_requirements: *23070700
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: 2.3.5
103
143
  - !ruby/object:Gem::Dependency
104
144
  name: fftw3
105
- requirement: &23068400 !ruby/object:Gem::Requirement
145
+ requirement: !ruby/object:Gem::Requirement
106
146
  none: false
107
147
  requirements:
108
148
  - - ~>
@@ -110,10 +150,15 @@ dependencies:
110
150
  version: '0.3'
111
151
  type: :development
112
152
  prerelease: false
113
- version_requirements: *23068400
153
+ version_requirements: !ruby/object:Gem::Requirement
154
+ none: false
155
+ requirements:
156
+ - - ~>
157
+ - !ruby/object:Gem::Version
158
+ version: '0.3'
114
159
  - !ruby/object:Gem::Dependency
115
160
  name: rspec
116
- requirement: &23066100 !ruby/object:Gem::Requirement
161
+ requirement: !ruby/object:Gem::Requirement
117
162
  none: false
118
163
  requirements:
119
164
  - - ~>
@@ -121,10 +166,15 @@ dependencies:
121
166
  version: '2.6'
122
167
  type: :development
123
168
  prerelease: false
124
- version_requirements: *23066100
169
+ version_requirements: !ruby/object:Gem::Requirement
170
+ none: false
171
+ requirements:
172
+ - - ~>
173
+ - !ruby/object:Gem::Version
174
+ version: '2.6'
125
175
  - !ruby/object:Gem::Dependency
126
176
  name: jeweler
127
- requirement: &23063900 !ruby/object:Gem::Requirement
177
+ requirement: !ruby/object:Gem::Requirement
128
178
  none: false
129
179
  requirements:
130
180
  - - ~>
@@ -132,7 +182,12 @@ dependencies:
132
182
  version: 1.5.2
133
183
  type: :development
134
184
  prerelease: false
135
- version_requirements: *23063900
185
+ version_requirements: !ruby/object:Gem::Requirement
186
+ none: false
187
+ requirements:
188
+ - - ~>
189
+ - !ruby/object:Gem::Version
190
+ version: 1.5.2
136
191
  description: mass spectrometry proteomics, lipidomics, and tools, a rewrite of mspire,
137
192
  merging of ms-* gems
138
193
  email: jtprince@gmail.com
@@ -244,6 +299,7 @@ files:
244
299
  - obo/ims.obo
245
300
  - obo/ms.obo
246
301
  - obo/unit.obo
302
+ - script/download_uniprotkb_db.rb
247
303
  - script/mzml_read_binary.rb
248
304
  - script/quant_compare_direct_injections.rb
249
305
  - spec/cv/param_spec.rb
@@ -333,7 +389,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
333
389
  version: '0'
334
390
  requirements: []
335
391
  rubyforge_project:
336
- rubygems_version: 1.8.15
392
+ rubygems_version: 1.8.18
337
393
  signing_key:
338
394
  specification_version: 3
339
395
  summary: mass spectrometry proteomics, lipidomics, and tools