ms-core 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,13 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ # Add dependencies to develop your gem here.
7
+ # Include everything needed to run rake, tests, features, etc.
8
+ group :development do
9
+ gem "spec-more", ">= 0"
10
+ gem "bundler", "~> 1.0.0"
11
+ gem "jeweler", "~> 1.5.2"
12
+ gem "rcov", ">= 0"
13
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,22 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ bacon (1.1.0)
5
+ git (1.2.5)
6
+ jeweler (1.5.2)
7
+ bundler (~> 1.0.0)
8
+ git (>= 1.2.5)
9
+ rake
10
+ rake (0.8.7)
11
+ rcov (0.9.9)
12
+ spec-more (0.0.4)
13
+ bacon
14
+
15
+ PLATFORMS
16
+ ruby
17
+
18
+ DEPENDENCIES
19
+ bundler (~> 1.0.0)
20
+ jeweler (~> 1.5.2)
21
+ rcov
22
+ spec-more
data/Rakefile CHANGED
@@ -1,30 +1,36 @@
1
1
  require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
2
10
  require 'rake'
3
- require 'jeweler'
4
- require 'rcov/rcovtask'
5
- require 'rake/rdoctask'
6
- require 'rake/testtask'
7
11
 
12
+ require 'jeweler'
8
13
  Jeweler::Tasks.new do |gem|
14
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
9
15
  gem.name = "ms-core"
10
- gem.summary = "basic, shared functionality for mspire libraries"
11
- gem.description = "basic, shared functionality for mspire libraries"
12
- gem.email = "jtprince@gmail.com"
13
- gem.homepage = "http://github.com/jtprince/ms-core/rdoc"
14
- gem.authors = ["Simon Chiang", "John Prince"]
15
- # dependencies:
16
- gem.add_dependency("molecules", ">= 0.2.0")
17
-
18
- # dev dependencies:
19
- gem.add_development_dependency "spec-more", ">= 0"
16
+ gem.homepage = "http://github.com/jtprince/ms-core"
17
+ gem.license = "MIT"
18
+ gem.summary = %Q{basic, shared functionality for mspire libraries}
19
+ gem.description = %Q{basic, shared functionality for mspire libraries}
20
+ gem.email = "jtprince@gmail.com"
21
+ gem.authors = ["John T. Prince", "Simon Chiang"]
22
+ # Dependencies in Gemfile
20
23
  end
24
+ Jeweler::RubygemsDotOrgTasks.new
21
25
 
26
+ require 'rake/testtask'
22
27
  Rake::TestTask.new(:spec) do |spec|
23
28
  spec.libs << 'lib' << 'spec'
24
29
  spec.pattern = 'spec/**/*_spec.rb'
25
30
  spec.verbose = true
26
31
  end
27
32
 
33
+ require 'rcov/rcovtask'
28
34
  Rcov::RcovTask.new do |spec|
29
35
  spec.libs << 'spec'
30
36
  spec.pattern = 'spec/**/*_spec.rb'
@@ -33,6 +39,7 @@ end
33
39
 
34
40
  task :default => :spec
35
41
 
42
+ require 'rake/rdoctask'
36
43
  Rake::RDocTask.new do |rdoc|
37
44
  version = File.exist?('VERSION') ? File.read('VERSION') : ""
38
45
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.9
1
+ 0.0.10
data/lib/ms/mass/aa.rb CHANGED
@@ -1,9 +1,11 @@
1
- require 'molecules'
1
+ require 'yaml'
2
+
2
3
  require 'ms/mass'
3
4
 
4
5
  module Ms
5
6
  module Mass
6
7
 
8
+
7
9
  # A module for working with commonly used residue masses in proteomics.
8
10
  #
9
11
  # require 'ms/mass/aa'
@@ -15,10 +17,96 @@ module Ms
15
17
  # # or use symbols
16
18
  # MONO[:A] # => 71.0371137878
17
19
  #
18
- # This module is built on the excellent {'molecules'
20
+ # molecules is built on constants and constants on ruby-units and it seems
21
+ # impossible to get ruby-units 1.9 compatible. Until that point, values
22
+ # will remain hard coded and these values are free of dependencies.
23
+ #
24
+ # The values are built using the excellent {'molecules'
19
25
  # library}[http://github.com/bahuvrihi/molecules/tree/master]. See that
20
26
  # library for more serious work with masses.
21
27
  module AA
28
+
29
+ yaml = <<-END
30
+ ---
31
+ avg:
32
+ "*": 118.88603
33
+ A: 71.0779
34
+ B: 172.1405
35
+ C: 103.1429
36
+ D: 115.0874
37
+ E: 129.11398
38
+ F: 147.17386
39
+ G: 57.05132
40
+ H: 137.13928
41
+ I: 113.15764
42
+ K: 128.17228
43
+ L: 113.15764
44
+ M: 131.19606
45
+ N: 114.10264
46
+ O: 211.28076
47
+ P: 97.11518
48
+ Q: 128.12922
49
+ R: 156.18568
50
+ S: 87.0773
51
+ T: 101.10388
52
+ U: 150.0379
53
+ V: 99.13106
54
+ W: 186.2099
55
+ X: 118.88603
56
+ Y: 163.17326
57
+ Z: 128.6231
58
+ mono:
59
+ "*": 118.805716
60
+ A: 71.0371137878
61
+ B: 172.048405
62
+ C: 103.0091844778
63
+ D: 115.026943032
64
+ E: 129.0425930962
65
+ F: 147.0684139162
66
+ G: 57.0214637236
67
+ H: 137.0589118624
68
+ I: 113.0840639804
69
+ K: 128.0949630177
70
+ L: 113.0840639804
71
+ M: 131.0404846062
72
+ N: 114.0429274472
73
+ O: 211.1446528645
74
+ P: 97.052763852
75
+ Q: 128.0585775114
76
+ R: 156.1011110281
77
+ S: 87.0320284099
78
+ T: 101.0476784741
79
+ U: 150.9536355878
80
+ V: 99.0684139162
81
+ W: 186.0793129535
82
+ X: 118.805716
83
+ Y: 163.0633285383
84
+ Z: 128.550585
85
+ END
86
+
87
+
88
+ embedded_mass_hashes = YAML.load(yaml)
89
+ # amino_acids keys as strings, monoisotopic masses
90
+ MONO_STRING = embedded_mass_hashes['mono']
91
+ # amino_acids keys as symbols, monoisotopic masses
92
+ MONO_SYM = Hash[MONO_STRING.map {|aa,mass| [aa.to_sym, mass] } ]
93
+
94
+ # amino_acids keys as strings, average masses
95
+ AVG_STRING = embedded_mass_hashes['avg']
96
+ # amino_acids keys as symbols, average masses
97
+ AVG_SYM = Hash[AVG_STRING.map {|aa,mass| [aa.to_sym, mass] } ]
98
+
99
+ # amino_acids keys as symbols and also strings, monoisotopic masses
100
+ MONO = MONO_SYM.merge(MONO_STRING)
101
+ # amino_acids keys as symbols and also strings, average masses
102
+ AVG = AVG_SYM.merge(AVG_STRING)
103
+
104
+ ###########################################################################
105
+ # This section is broken in 1.9 (ruby-units fault), so we generate the
106
+ # data and include it.
107
+ ###########################################################################
108
+
109
+ =begin
22
110
  # These are included here to offer maximum functionality
23
111
  MOLECULES_MONO_UNSUPPORTED = {
24
112
  :B => 172.048405, # average of aspartic acid and asparagine
@@ -39,10 +127,11 @@ module Ms
39
127
  # returns a hash based on the molecules library of amino acid residues.
40
128
  # type is :mono or :avg
41
129
  def self.mass_index(type=:mono)
130
+ require 'molecules'
42
131
  hash = {}
43
132
  ('A'..'Z').each do |letter|
44
133
  if res = Molecules::Libraries::Residue[letter]
45
- hash[letter] =
134
+ hash[letter.to_sym] =
46
135
  if type == :mono
47
136
  res.mass
48
137
  elsif type == :avg
@@ -55,13 +144,38 @@ module Ms
55
144
  hash
56
145
  end
57
146
 
147
+ # Returns mono and avg tables as yaml with all keys as strings.
148
+ # The top level keys are 'avg' and 'mono'
149
+ def self.indices_to_yaml
150
+ # this only works with ruby1.8 currently, so we use it to generate the
151
+ # data we need
152
+ require 'molecules'
153
+ [AVG, MONO].each do |hash|
154
+ hash.each {|k,v| hash[k.to_s] = hash.delete(k) }
155
+ end
156
+ {'avg' => AVG, 'mono' => MONO}.to_yaml
157
+ end
158
+
58
159
  MONO = MOLECULES_MONO_UNSUPPORTED.merge( self.mass_index(:mono) )
59
160
  AVG = MOLECULES_AVG_UNSUPPORTED.merge( self.mass_index(:avg) )
60
- [AVG, MONO].each do |hash|
61
- hash.each {|k,v| hash[k.to_s] = v }
161
+
162
+ # the script to sort it nicely using ruby 1.9:
163
+ require 'yaml'
164
+ h = YAML.load_file(ARGV.shift)
165
+ new_hash = {}
166
+ h.sort.each do |key, aahash|
167
+ new_hash[key] = Hash[aahash.sort]
62
168
  end
169
+ puts new_hash.to_yaml
170
+
171
+ =end
172
+
173
+ ###########################################################################
174
+ # End fudge
175
+ ###########################################################################
63
176
 
64
177
  end
65
178
  end
66
179
  end
67
180
 
181
+
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ require 'ms/mass/aa'
4
+
5
+ describe 'using a mass table' do
6
+ it 'has monoisotopic masses by string or symbol' do
7
+ Ms::Mass::AA::MONO['A'].is 71.0371137878
8
+ Ms::Mass::AA::MONO[:A].is 71.0371137878
9
+ end
10
+ it 'has average masses by string or symbol' do
11
+ Ms::Mass::AA::AVG['A'].is 71.0779
12
+ Ms::Mass::AA::AVG[:A].is 71.0779
13
+ end
14
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,16 @@
1
1
  require 'rubygems'
2
- require 'spec/more'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
3
10
  require 'benchmark'
11
+ require 'spec/more'
12
+
13
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
14
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
4
15
 
5
16
  Bacon.summary_on_exit
metadata CHANGED
@@ -5,22 +5,21 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 9
9
- version: 0.0.9
8
+ - 10
9
+ version: 0.0.10
10
10
  platform: ruby
11
11
  authors:
12
+ - John T. Prince
12
13
  - Simon Chiang
13
- - John Prince
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-02-21 00:00:00 -07:00
18
+ date: 2011-02-24 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: molecules
23
- prerelease: false
22
+ name: spec-more
24
23
  requirement: &id001 !ruby/object:Gem::Requirement
25
24
  none: false
26
25
  requirements:
@@ -28,15 +27,43 @@ dependencies:
28
27
  - !ruby/object:Gem::Version
29
28
  segments:
30
29
  - 0
31
- - 2
32
- - 0
33
- version: 0.2.0
34
- type: :runtime
30
+ version: "0"
31
+ type: :development
32
+ prerelease: false
35
33
  version_requirements: *id001
36
34
  - !ruby/object:Gem::Dependency
37
- name: spec-more
38
- prerelease: false
35
+ name: bundler
39
36
  requirement: &id002 !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ~>
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 1
43
+ - 0
44
+ - 0
45
+ version: 1.0.0
46
+ type: :development
47
+ prerelease: false
48
+ version_requirements: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ name: jeweler
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ~>
55
+ - !ruby/object:Gem::Version
56
+ segments:
57
+ - 1
58
+ - 5
59
+ - 2
60
+ version: 1.5.2
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: *id003
64
+ - !ruby/object:Gem::Dependency
65
+ name: rcov
66
+ requirement: &id004 !ruby/object:Gem::Requirement
40
67
  none: false
41
68
  requirements:
42
69
  - - ">="
@@ -45,7 +72,8 @@ dependencies:
45
72
  - 0
46
73
  version: "0"
47
74
  type: :development
48
- version_requirements: *id002
75
+ prerelease: false
76
+ version_requirements: *id004
49
77
  description: basic, shared functionality for mspire libraries
50
78
  email: jtprince@gmail.com
51
79
  executables: []
@@ -55,6 +83,8 @@ extensions: []
55
83
  extra_rdoc_files:
56
84
  - README.rdoc
57
85
  files:
86
+ - Gemfile
87
+ - Gemfile.lock
58
88
  - History
59
89
  - MIT-LICENSE
60
90
  - README.rdoc
@@ -82,12 +112,13 @@ files:
82
112
  - lib/openany.rb
83
113
  - spec/ms/calc_spec.rb
84
114
  - spec/ms/data_spec.rb
115
+ - spec/ms/mass/aa_spec.rb
85
116
  - spec/ms/support/binary_search_spec.rb
86
117
  - spec/spec_helper.rb
87
118
  has_rdoc: true
88
- homepage: http://github.com/jtprince/ms-core/rdoc
89
- licenses: []
90
-
119
+ homepage: http://github.com/jtprince/ms-core
120
+ licenses:
121
+ - MIT
91
122
  post_install_message:
92
123
  rdoc_options: []
93
124
 
@@ -98,6 +129,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
98
129
  requirements:
99
130
  - - ">="
100
131
  - !ruby/object:Gem::Version
132
+ hash: -2752488455848385314
101
133
  segments:
102
134
  - 0
103
135
  version: "0"
@@ -119,5 +151,6 @@ summary: basic, shared functionality for mspire libraries
119
151
  test_files:
120
152
  - spec/ms/calc_spec.rb
121
153
  - spec/ms/data_spec.rb
154
+ - spec/ms/mass/aa_spec.rb
122
155
  - spec/ms/support/binary_search_spec.rb
123
156
  - spec/spec_helper.rb