mascot-dat 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -7,4 +7,5 @@ Gemfile.lock
7
7
  test.rb
8
8
  gh.yml
9
9
  doc/*
10
- .yardoc
10
+ .yardoc
11
+ scratch.rb
data/Rakefile CHANGED
@@ -8,11 +8,10 @@ Rake::TestTask.new do |t|
8
8
  t.verbose = true
9
9
  end
10
10
 
11
-
12
11
  # documentation
13
12
  require 'yard'
14
13
  require 'yard/rake/yardoc_task'
15
14
  YARD::Rake::YardocTask.new do |t|
16
- t.files = ['lib/**/*.rb'] # optional
17
- t.options = ["--files README.rdoc LICENSE -r README.rdoc"] # optional
18
- end
15
+ t.files = ['lib/**/*.rb', '-' , "README.rdoc","LICENSE"]
16
+ t.options = ["-r","README.rdoc"]
17
+ end
@@ -1,23 +1,60 @@
1
1
  module Mascot
2
2
  class DAT
3
+
4
+ # A Hash of the mass table section. See the {#masstable masstable} instance method for details.
3
5
  class Masses
6
+ # The main table of masses. Given the following examples from a DAT file:
7
+ #
8
+ # W=186.079313
9
+ # X=111.000000
10
+ # Y=163.063329
11
+ # Z=128.550590
12
+ # Hydrogen=1.007825
13
+ # Carbon=12.000000
14
+ #
15
+ # You can access the value for Hydrogen as:
16
+ # mydat.masses.masstable[:Hydorgen] # => 1.007825
17
+ # or
18
+ # mydat.masses.m[:Hydrogen] # => 1.007825
19
+ # or
20
+ # mydat.masses.hydorgen # => 1.007825
21
+ attr_reader :masstable
22
+ # def masstable
23
+ # @masstable
24
+ # end
25
+ alias_method :m, :masstable
4
26
 
5
- # An array of mass deltas. Order corresponds to parameter IT_MODS
27
+ # A subset of the mass table defining the variable modications. For
28
+ # example, given the following delta in a DAT file:
29
+ #
30
+ # delta1=15.994915,Oxidation (M)
31
+ #
32
+ # Then the following gets defined:
33
+ #
34
+ # @deltas = [[15.994915,"Oxidation (M)"], ... ]
35
+ #
6
36
  attr_reader :deltas
37
+ alias_method :mods, :deltas
38
+ alias_method :d, :deltas
7
39
 
8
- # An array of mass deltas. Order corresponds to parameter MODS
9
- attr_reader :fixed_mods
10
-
11
- # A Hash of the mass table. E.g.
40
+ # A subset of the mass table defining the fixed modifications. For
41
+ # example:
12
42
  #
13
- # self.masstable[:Hydorgen] #=> 1.007825
43
+ # FixedMod1=57.021464,Carbamidomethyl (C)
44
+ # FixedModResidues1=C
14
45
  #
15
- attr_reader :masstable
46
+ # Then the following gets defined:
47
+ #
48
+ # @fixed_modifications = [[57.021464, "Carbamidomethyl (C)", "C"], ...]
49
+ #
50
+ attr_reader :fixed_modifications
51
+ alias_method :fixed_mods, :fixed_modifications
52
+ alias_method :f, :fixed_modifications
16
53
 
17
54
  def initialize masses_section
18
55
  @masstable = {}
19
56
  @deltas = []
20
- @fixed_mods = []
57
+ @fixed_modifications = []
21
58
 
22
59
  masses_section.split("\n").each do |l|
23
60
  k,v = l.split("=")
@@ -32,16 +69,19 @@ module Mascot
32
69
  idx = $2.to_i - 1
33
70
  if $1.empty?
34
71
  # new fixed mod record
35
- @fixed_mods[idx] = v.split(",")
36
- @fixed_mods[idx][0] = @fixed_mods[idx][0].to_f
37
- @masstable[k.to_sym] = @fixed_mods[idx][0]
72
+ @fixed_modifications[idx] = v.split(",")
73
+ @fixed_modifications[idx][0] = @fixed_modifications[idx][0].to_f
74
+ @masstable[k.to_sym] = @fixed_modifications[idx][0]
38
75
  else
39
76
  # append the modified residue to the array
40
- @fixed_mods[idx] << v
77
+ @fixed_modifications[idx] << v
41
78
  end
42
79
  else
43
80
  @masstable[k.to_sym] = v.to_f
44
81
  end
82
+ @masstable.keys.each do |m|
83
+ self.class.send(:define_method,m, lambda { @masstable[m] })
84
+ end
45
85
  end
46
86
  end
47
87
  end
@@ -39,10 +39,8 @@ module Mascot
39
39
  k,v = l.split "="
40
40
  case k
41
41
  when /^q(\d+)_p(\d+)$/
42
- # just put query & rank in the beginning, because $1, $2 return zero after the split
43
42
  psm_result.query = $1.to_i
44
43
  psm_result.rank = $2.to_i
45
- #main result, must split value
46
44
  psm_vals, prots = v.split(";")
47
45
  psm_vals = psm_vals.split(',')
48
46
  psm_result.missed_cleavages= psm_vals[0].to_i
@@ -1,6 +1,6 @@
1
1
  module Mascot
2
2
  class DAT
3
- VERSION = "0.1.2"
3
+ VERSION = "0.1.3"
4
4
  end
5
5
  end
6
6
 
data/lib/mascot/dat.rb CHANGED
@@ -24,6 +24,7 @@ module Mascot
24
24
  class DAT
25
25
  attr_reader :idx
26
26
  attr_reader :boundary
27
+ attr_reader :boundary_string
27
28
  attr_reader :dat_file
28
29
  SECTIONS = ["summary", "decoy_summary", "et_summary", "parameters",
29
30
  "peptides", "decoy_peptides", "et_peptides",
@@ -34,6 +35,7 @@ module Mascot
34
35
  @dat_file = File.open(dat_file_path)
35
36
  @idx = {}
36
37
  @boundary = nil
38
+ @boundary_string = nil
37
39
  @cache_index = cache_index
38
40
  parse_index
39
41
  end
@@ -53,11 +55,10 @@ module Mascot
53
55
  def query(n)
54
56
  # search index for this
55
57
  bytepos = @idx["query#{n}".to_sym]
56
- @dat_file.pos = bytepos
57
- @dat_file.readline # ADDED
58
+ @dat_file.pos = bytepos + @boundary_string.length
58
59
  att_rx = /(\w+)\=(.+)/
59
60
  q = {}
60
- each do |l|
61
+ @dat_file.each do |l|
61
62
  l.chomp
62
63
  case l
63
64
  when att_rx
@@ -65,9 +66,7 @@ module Mascot
65
66
  case k
66
67
  when "title"
67
68
  q[k.to_sym] = URI.decode(v)
68
- # when "Ions1"
69
- # q[k.to_sym] = v.split(",").collect {|e| e.split(":").collect {|ee| ee.to_f}}
70
- when "Ions1" # CHANGED POSITION TO GET IN THE BLOCK AND DO THE PARSE TO GET THE ARRAY
69
+ when "Ions1"
71
70
  q[:peaks] = parse_mzi(v)
72
71
  else
73
72
  q[k.to_sym] = v
@@ -82,15 +81,7 @@ module Mascot
82
81
  end
83
82
 
84
83
  alias_method :spectrum, :query
85
- def parse_mzi(ions_str)
86
- mzi = [[],[]]
87
- ions_str.split(",").collect do |mzpair|
88
- tmp = mzpair.split(":").collect {|e| e.to_f}
89
- mzi[0] << tmp[0]
90
- mzi[1] << tmp[1]
91
- end
92
- mzi
93
- end
84
+
94
85
 
95
86
  # Go to a section of the Mascot DAT file
96
87
  def goto(key)
@@ -104,7 +95,7 @@ module Mascot
104
95
  # Read a section of the DAT file into memory. THIS IS NOT
105
96
  # RECOMMENDED UNLESS YOU KNOW WHAT YOU ARE DOING.
106
97
  #
107
- # @param [String or Symbol] The section name
98
+ # @param key [String or Symbol] The section name
108
99
  # @return [String] The section of the DAT file as a String. The section
109
100
  # includes the MIME boundary and content type
110
101
  # definition lines.
@@ -165,6 +156,7 @@ module Mascot
165
156
  idxf = File.open(idxfn)
166
157
  @idx = ::Marshal.load(idxf.read)
167
158
  @boundary = @idx[:boundary]
159
+ @boundary_string = @idx[:boundary_string]
168
160
  idxf.close
169
161
  else
170
162
  create_index()
@@ -178,9 +170,10 @@ module Mascot
178
170
  # MIME header line, to parse out boundary
179
171
  @dat_file.readline
180
172
  @dat_file.readline =~/boundary=(\w+)$/
181
- boundary_string = "--#{$1}"
182
- @boundary = /#{boundary_string}/
173
+ @boundary_string = "--#{$1}"
174
+ @boundary = /#{@boundary_string}/
183
175
  @idx[:boundary] = @boundary
176
+ @idx[:boundary_string] = @boundary_string
184
177
  @dat_file.grep(@boundary) do |l|
185
178
  break if @dat_file.eof?
186
179
  section_position = @dat_file.pos - l.length
@@ -195,5 +188,16 @@ module Mascot
195
188
  end
196
189
  @dat_file.rewind
197
190
  end
191
+
192
+ # Parse the ion string of mz/intensity peaks in Ions section
193
+ # Peaks are not ordered, so we must account for that.
194
+ def parse_mzi(ions_str)
195
+ mzi_tmp = []
196
+ ions_str.split(",").collect do |mzpair|
197
+ mzi_tmp << mzpair.split(":").collect {|e| e.to_f}
198
+ end
199
+ # now sort the mz_tmp array as ascending m/z, and return the array
200
+ mzi_tmp.sort
201
+ end
198
202
  end
199
203
  end
@@ -0,0 +1 @@
1
+ [&[f59.044502f 1.951e5[f76.396653f 1.951e5[f88.063115f 1.951e5[f92.727062f 1.951e5[f111.734216f 1.951e5[f114.091341f 1.951e5[f122.082957f 1.951e5[f138.586954f 1.951e5[f160.757021f 1.951e5[f167.097686f 1.951e5[f171.105762f 1.951e5[f175.118953f 1.951e5[f182.620797f 1.951e5[f190.112916f 1.951e5[f206.443325f 1.951e5[f223.795476f 1.951e5[f227.175405f 1.951e5[f240.631893f 1.951e5[f244.138013f 1.951e5[f256.155004f 1.951e5[f276.166632f 1.951e5[f284.665736f 1.951e5[f309.16135f 1.951e5[f333.188096f 1.951e5[f335.189576f 1.951e5[f364.234317f 1.951e5[f365.703382f 1.951e5[f480.256511f 1.951e5[f511.302732f 1.951e5[f568.324196f 1.951e5[f617.315423f 1.951e5[f669.371875f 1.951e5[f730.399487f 1.951e5
@@ -9,4 +9,7 @@ class TestMascotDatHelper < Test::Unit::TestCase
9
9
  pass
10
10
  end
11
11
 
12
+ # def teardown
13
+ # File.unlink("test/fixtures/example.dat.idx")
14
+ # end
12
15
  end
@@ -17,6 +17,7 @@ class TestMascotDatMasses < TestMascotDatHelper
17
17
  def test_masses_delta1
18
18
  # delta1=15.994915,Oxidation (M)
19
19
  assert_equal(15.994915,@masses.masstable[:delta1])
20
+ assert_equal(15.994915,@masses.delta1)
20
21
  end
21
22
  def test_masses_var_mod_is_delta1
22
23
  assert_equal(15.994915,@masses.deltas[0][0])
@@ -24,6 +25,7 @@ class TestMascotDatMasses < TestMascotDatHelper
24
25
  end
25
26
  def test_masses_FixedMod1_mass
26
27
  assert_equal(57.021464,@masses.masstable[:FixedMod1])
28
+ assert_equal(57.021464,@masses.FixedMod1)
27
29
  end
28
30
 
29
31
  def test_masses_fixed_mod_is_FixedMod1
@@ -35,10 +35,17 @@ class TestMascotDat < TestMascotDatHelper
35
35
  assert_equal(expected_section, @dat.read_section("enzyme"))
36
36
  assert_equal(expected_section, @dat.read_section(:enzyme))
37
37
  end
38
- def test_read_section_masses
38
+
39
+ def test_read_section_masses
39
40
  expected_section = File.read("test/fixtures/masses_section.txt")
40
41
  assert_equal(expected_section, @dat.read_section("masses"))
41
42
  assert_equal(expected_section, @dat.read_section(:masses))
42
43
  end
43
44
 
45
+ def test_peaks
46
+ expected_peaks = Marshal.load(File.read("test/fixtures/query23_peaks.dmp"))
47
+ query23 = @dat.query(23)
48
+ assert_equal(expected_peaks,query23[:peaks])
49
+ end
50
+
44
51
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mascot-dat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-25 00:00:00.000000000 Z
12
+ date: 2012-07-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &70321258178380 !ruby/object:Gem::Requirement
16
+ requirement: &70330121470000 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70321258178380
24
+ version_requirements: *70330121470000
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: yard
27
- requirement: &70321258193380 !ruby/object:Gem::Requirement
27
+ requirement: &70330121469460 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70321258193380
35
+ version_requirements: *70330121469460
36
36
  description: Mascot DAT file format parser
37
37
  email:
38
38
  - angel@upenn.edu
@@ -61,6 +61,7 @@ files:
61
61
  - test/fixtures/example.dat
62
62
  - test/fixtures/header_section.txt
63
63
  - test/fixtures/masses_section.txt
64
+ - test/fixtures/query23_peaks.dmp
64
65
  - test/test_mascot-dat-enzyme.rb
65
66
  - test/test_mascot-dat-header_info.rb
66
67
  - test/test_mascot-dat-helper.rb
@@ -85,7 +86,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
85
86
  version: '0'
86
87
  segments:
87
88
  - 0
88
- hash: -2702393217074327474
89
+ hash: -998556290879411337
89
90
  required_rubygems_version: !ruby/object:Gem::Requirement
90
91
  none: false
91
92
  requirements:
@@ -94,7 +95,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
94
95
  version: '0'
95
96
  segments:
96
97
  - 0
97
- hash: -2702393217074327474
98
+ hash: -998556290879411337
98
99
  requirements: []
99
100
  rubyforge_project:
100
101
  rubygems_version: 1.8.11
@@ -106,6 +107,7 @@ test_files:
106
107
  - test/fixtures/example.dat
107
108
  - test/fixtures/header_section.txt
108
109
  - test/fixtures/masses_section.txt
110
+ - test/fixtures/query23_peaks.dmp
109
111
  - test/test_mascot-dat-enzyme.rb
110
112
  - test/test_mascot-dat-header_info.rb
111
113
  - test/test_mascot-dat-helper.rb