mspire 0.5.0 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. data/README.rdoc +24 -0
  2. data/Rakefile +51 -0
  3. data/VERSION +1 -0
  4. data/lib/cv/description.rb +18 -0
  5. data/lib/cv/param.rb +33 -0
  6. data/lib/cv.rb +3 -0
  7. data/lib/io/bookmark.rb +13 -0
  8. data/lib/merge.rb +7 -0
  9. data/lib/ms/cvlist.rb +76 -0
  10. data/lib/ms/digester.rb +245 -0
  11. data/lib/ms/fasta.rb +86 -0
  12. data/lib/ms/ident/peptide/db.rb +243 -0
  13. data/lib/ms/ident/peptide.rb +72 -0
  14. data/lib/ms/ident/peptide_hit/qvalue.rb +56 -0
  15. data/lib/ms/ident/peptide_hit.rb +26 -0
  16. data/lib/ms/ident/pepxml/modifications.rb +83 -0
  17. data/lib/ms/ident/pepxml/msms_pipeline_analysis.rb +70 -0
  18. data/lib/ms/ident/pepxml/msms_run_summary.rb +82 -0
  19. data/lib/ms/ident/pepxml/parameters.rb +14 -0
  20. data/lib/ms/ident/pepxml/sample_enzyme.rb +165 -0
  21. data/lib/ms/ident/pepxml/search_database.rb +49 -0
  22. data/lib/ms/ident/pepxml/search_hit/modification_info.rb +79 -0
  23. data/lib/ms/ident/pepxml/search_hit.rb +144 -0
  24. data/lib/ms/ident/pepxml/search_result.rb +35 -0
  25. data/lib/ms/ident/pepxml/search_summary.rb +92 -0
  26. data/lib/ms/ident/pepxml/spectrum_query.rb +85 -0
  27. data/lib/ms/ident/pepxml.rb +112 -0
  28. data/lib/ms/ident/protein.rb +33 -0
  29. data/lib/ms/ident/protein_group.rb +80 -0
  30. data/lib/ms/ident/search.rb +114 -0
  31. data/lib/ms/ident.rb +37 -0
  32. data/lib/ms/isotope/aa.rb +59 -0
  33. data/lib/ms/mascot.rb +6 -0
  34. data/lib/ms/mass/aa.rb +79 -0
  35. data/lib/ms/mass.rb +55 -0
  36. data/lib/ms/mzml/index_list.rb +98 -0
  37. data/lib/ms/mzml/plms1.rb +34 -0
  38. data/lib/ms/mzml.rb +197 -0
  39. data/lib/ms/obo.rb +38 -0
  40. data/lib/ms/plms1.rb +156 -0
  41. data/lib/ms/quant/qspec/protein_group_comparison.rb +22 -0
  42. data/lib/ms/quant/qspec.rb +112 -0
  43. data/lib/ms/spectrum.rb +154 -8
  44. data/lib/ms.rb +3 -10
  45. data/lib/msplat.rb +2 -0
  46. data/lib/obo/ims.rb +5 -0
  47. data/lib/obo/ms.rb +7 -0
  48. data/lib/obo/ontology.rb +41 -0
  49. data/lib/obo/unit.rb +5 -0
  50. data/lib/openany.rb +23 -0
  51. data/lib/write_file_or_string.rb +18 -0
  52. data/obo/ims.obo +562 -0
  53. data/obo/ms.obo +11677 -0
  54. data/obo/unit.obo +2563 -0
  55. data/spec/ms/cvlist_spec.rb +60 -0
  56. data/spec/ms/digester_spec.rb +351 -0
  57. data/spec/ms/fasta_spec.rb +100 -0
  58. data/spec/ms/ident/peptide/db_spec.rb +108 -0
  59. data/spec/ms/ident/pepxml/sample_enzyme_spec.rb +181 -0
  60. data/spec/ms/ident/pepxml/search_hit/modification_info_spec.rb +37 -0
  61. data/spec/ms/ident/pepxml_spec.rb +442 -0
  62. data/spec/ms/ident/protein_group_spec.rb +68 -0
  63. data/spec/ms/mass_spec.rb +8 -0
  64. data/spec/ms/mzml/index_list_spec.rb +122 -0
  65. data/spec/ms/mzml/plms1_spec.rb +62 -0
  66. data/spec/ms/mzml_spec.rb +50 -0
  67. data/spec/ms/plms1_spec.rb +38 -0
  68. data/spec/ms/quant/qspec_spec.rb +25 -0
  69. data/spec/msplat_spec.rb +24 -0
  70. data/spec/obo_spec.rb +25 -0
  71. data/spec/spec_helper.rb +25 -0
  72. data/spec/testfiles/ms/ident/peptide/db/uni_11_sp_tr.fasta +69 -0
  73. data/spec/testfiles/ms/ident/peptide/db/uni_11_sp_tr.msd_clvg2.min_aaseq4.yml +728 -0
  74. data/spec/testfiles/ms/mzml/j24z.idx_comp.3.mzML +271 -0
  75. data/spec/testfiles/ms/mzml/openms.noidx_nocomp.12.mzML +330 -0
  76. data/spec/testfiles/ms/quant/kill_extra_tabs.rb +13 -0
  77. data/spec/testfiles/ms/quant/max_quant_output.provenance.txt +15 -0
  78. data/spec/testfiles/ms/quant/max_quant_output.txt +199 -0
  79. data/spec/testfiles/ms/quant/pdcd5_final.killedextratabs.tsv +199 -0
  80. data/spec/testfiles/ms/quant/pdcd5_final.killedextratabs.tsv_qspecgp +199 -0
  81. data/spec/testfiles/ms/quant/pdcd5_final.killedextratabs.tsv_qspecgp.csv +199 -0
  82. data/spec/testfiles/ms/quant/pdcd5_final.txt +199 -0
  83. data/spec/testfiles/ms/quant/pdcd5_final.txt_qspecgp +0 -0
  84. data/spec/testfiles/ms/quant/pdcd5_lfq_qspec.CSV.csv +199 -0
  85. data/spec/testfiles/ms/quant/pdcd5_lfq_qspec.csv +199 -0
  86. data/spec/testfiles/ms/quant/pdcd5_lfq_qspec.oneprot.csv +199 -0
  87. data/spec/testfiles/ms/quant/pdcd5_lfq_qspec.oneprot.tsv +199 -0
  88. data/spec/testfiles/ms/quant/pdcd5_lfq_qspec.oneprot.tsv_qspecgp +199 -0
  89. data/spec/testfiles/ms/quant/pdcd5_lfq_qspec.oneprot.tsv_qspecgp.csv +199 -0
  90. data/spec/testfiles/ms/quant/pdcd5_lfq_qspec.txt +199 -0
  91. data/spec/testfiles/ms/quant/pdcd5_lfq_tabdel.txt +134 -0
  92. data/spec/testfiles/ms/quant/pdcd5_lfq_tabdel.txt_qspecgp +134 -0
  93. data/spec/testfiles/ms/quant/remove_rest_of_proteins.rb +13 -0
  94. data/spec/testfiles/ms/quant/unlog_transform.rb +13 -0
  95. data/spec/testfiles/plms1/output.key +0 -0
  96. metadata +157 -40
  97. data/README +0 -77
  98. data/changelog.txt +0 -196
  99. data/lib/ms/calc.rb +0 -32
  100. data/lib/ms/data/interleaved.rb +0 -60
  101. data/lib/ms/data/lazy_io.rb +0 -73
  102. data/lib/ms/data/lazy_string.rb +0 -15
  103. data/lib/ms/data/simple.rb +0 -59
  104. data/lib/ms/data/transposed.rb +0 -41
  105. data/lib/ms/data.rb +0 -57
  106. data/lib/ms/format/format_error.rb +0 -12
  107. data/lib/ms/support/binary_search.rb +0 -126
data/lib/ms/spectrum.rb CHANGED
@@ -1,14 +1,35 @@
1
- module Ms
1
+ module MS
2
2
  class Spectrum
3
+ include Enumerable
4
+
3
5
  # The underlying data store.
4
6
  attr_reader :data
5
7
 
6
- # Associated headers
7
- attr_reader :headers
8
-
9
- def initialize(data, headers={})
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)
10
12
  @data = data
11
- @headers = headers
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
12
33
  end
13
34
 
14
35
  # An array of the mz data.
@@ -20,6 +41,131 @@ module Ms
20
41
  def intensities
21
42
  @data[1]
22
43
  end
23
-
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
+
24
170
  end
25
- end
171
+ end
data/lib/ms.rb CHANGED
@@ -1,10 +1,3 @@
1
- module Ms
2
- module_function
3
-
4
- # def parse(format, path)
5
- # const = Tap::Env.instance.search(:formats, format)
6
- # raise ArgumentError, "unknown format: #{format}" unless const
7
- # const.constantize.parse(path)
8
- # end
9
-
10
- end
1
+
2
+ module MS
3
+ end
data/lib/msplat.rb ADDED
@@ -0,0 +1,2 @@
1
+
2
+ require 'ms/mass/aa' # requires ms/mass
data/lib/obo/ims.rb ADDED
@@ -0,0 +1,5 @@
1
+ require 'obo/ontology'
2
+
3
+ module Obo
4
+ IMS = Obo::Ontology.new(Obo::Ontology::DIR + '/ims.obo')
5
+ end
data/lib/obo/ms.rb ADDED
@@ -0,0 +1,7 @@
1
+ require 'obo/ontology'
2
+
3
+ module Obo
4
+ MS = Obo::Ontology.new(Obo::Ontology::DIR + '/ms.obo')
5
+ end
6
+
7
+
@@ -0,0 +1,41 @@
1
+ require 'obo' # the gem obo
2
+
3
+ module Obo
4
+ class Ontology
5
+ DIR = File.expand_path(File.dirname(__FILE__) + '/../../obo')
6
+ attr_accessor :header
7
+ attr_accessor :elements
8
+
9
+ def initialize(file_or_io)
10
+ obo = Obo::Parser.new(file_or_io)
11
+ @elements = obo.elements.to_a
12
+ @header = elements.shift
13
+ end
14
+
15
+ # returns an id to name Hash
16
+ def id_to_name
17
+ @id_to_name ||= build_hash('id', 'name')
18
+ end
19
+ # returns a name to id Hash
20
+ def name_to_id
21
+ @name_to_id ||= build_hash('name', 'id')
22
+ end
23
+ def id_to_element
24
+ @id_to_element ||= build_hash('id', nil)
25
+ end
26
+
27
+ protected
28
+ def build_hash(key,val)
29
+ hash = {}
30
+ @elements.each do |el|
31
+ tv = el.tagvalues
32
+ if val.nil?
33
+ hash[tv[key].first] = el
34
+ else
35
+ hash[tv[key].first] = tv[val].first
36
+ end
37
+ end
38
+ hash
39
+ end
40
+ end
41
+ end
data/lib/obo/unit.rb ADDED
@@ -0,0 +1,5 @@
1
+ require 'obo/ontology'
2
+
3
+ module Obo
4
+ Unit = Obo::Ontology.new(Obo::Ontology::DIR + '/unit.obo')
5
+ end
data/lib/openany.rb ADDED
@@ -0,0 +1,23 @@
1
+
2
+ # takes a filename or an io object, hands a rewinded io object to the
3
+ # reciever and then closes the file or places the io in the original
4
+ # position.
5
+ def openany(arg, &block)
6
+ io =
7
+ if arg.is_a?(String) # filename
8
+ File.open(arg)
9
+ else
10
+ orig_pos = arg.pos
11
+ arg.rewind
12
+ arg
13
+ end
14
+ reply = block.call(io)
15
+ if arg.is_a?(String) # filename
16
+ io.close
17
+ else
18
+ arg.pos = orig_pos
19
+ end
20
+ reply
21
+ end
22
+
23
+
@@ -0,0 +1,18 @@
1
+
2
+ # if given a filename, writes to the file (and returns the filename),
3
+ # otherwise, writes to a string. Yields an io object to write to.
4
+ def write_file_or_string(filename=nil, &block)
5
+ out =
6
+ if filename
7
+ File.open(filename,'w')
8
+ else
9
+ StringIO.new
10
+ end
11
+ block.call(out)
12
+ if filename
13
+ out.close
14
+ filename
15
+ else
16
+ out.string
17
+ end
18
+ end