mspire 0.6.7 → 0.6.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. data/Rakefile +5 -0
  2. data/VERSION +1 -1
  3. data/lib/cv/param.rb +25 -5
  4. data/lib/cv/referenceable_param_group_ref.rb +13 -0
  5. data/lib/cv.rb +3 -1
  6. data/lib/ms/cv/param.rb +19 -24
  7. data/lib/ms/cv/paramable.rb +42 -0
  8. data/lib/ms/mzml/activation.rb +33 -0
  9. data/lib/ms/mzml/chromatogram.rb +29 -0
  10. data/lib/ms/mzml/chromatogram_list.rb +26 -0
  11. data/lib/ms/mzml/component.rb +21 -0
  12. data/lib/ms/mzml/contact.rb +23 -0
  13. data/lib/ms/mzml/cv.rb +46 -0
  14. data/lib/ms/mzml/data_array.rb +65 -0
  15. data/lib/ms/mzml/data_array_container_like.rb +57 -0
  16. data/lib/ms/mzml/data_processing.rb +27 -0
  17. data/lib/ms/mzml/file_content.rb +21 -0
  18. data/lib/ms/mzml/file_description.rb +47 -0
  19. data/lib/ms/mzml/instrument_configuration.rb +37 -0
  20. data/lib/ms/mzml/isolation_window.rb +21 -0
  21. data/lib/ms/mzml/list.rb +23 -0
  22. data/lib/ms/mzml/precursor.rb +42 -0
  23. data/lib/ms/mzml/processing_method.rb +24 -0
  24. data/lib/ms/mzml/product.rb +22 -0
  25. data/lib/ms/mzml/referenceable_param_group.rb +40 -0
  26. data/lib/ms/mzml/run.rb +54 -0
  27. data/lib/ms/mzml/sample.rb +27 -0
  28. data/lib/ms/mzml/scan.rb +44 -0
  29. data/lib/ms/mzml/scan_list.rb +33 -0
  30. data/lib/ms/mzml/scan_settings.rb +28 -0
  31. data/lib/ms/mzml/selected_ion.rb +18 -0
  32. data/lib/ms/mzml/software.rb +28 -0
  33. data/lib/ms/mzml/source_file.rb +48 -0
  34. data/lib/ms/mzml/spectrum.rb +91 -0
  35. data/lib/ms/mzml/spectrum_list.rb +42 -0
  36. data/lib/ms/mzml.rb +173 -6
  37. data/lib/ms/quant/qspec/protein_group_comparison.rb +3 -3
  38. data/lib/ms/quant/qspec.rb +4 -4
  39. data/lib/ms/spectrum.rb +137 -260
  40. data/lib/ms/spectrum_like.rb +133 -0
  41. data/lib/ms/user_param.rb +43 -0
  42. data/lib/mspire.rb +6 -0
  43. data/obo/ms.obo +670 -121
  44. data/obo/unit.obo +23 -1
  45. data/spec/ms/cv/param_spec.rb +33 -0
  46. data/spec/ms/mzml/cv_spec.rb +17 -0
  47. data/spec/ms/mzml/file_content_spec.rb +25 -0
  48. data/spec/ms/mzml/file_description_spec.rb +34 -0
  49. data/spec/ms/mzml/referenceable_param_group_spec.rb +33 -0
  50. data/spec/ms/mzml_spec.rb +65 -4
  51. data/spec/ms/user_param_spec.rb +51 -0
  52. data/spec/mspire_spec.rb +9 -0
  53. data/spec/testfiles/ms/mzml/mspire_simulated.noidx.check.mzML +81 -0
  54. metadata +57 -21
  55. data/lib/cv/description.rb +0 -19
  56. data/lib/ms/cv/description.rb +0 -44
  57. data/lib/msplat.rb +0 -2
  58. data/spec/ms/cv/description_spec.rb +0 -60
  59. data/spec/msplat_spec.rb +0 -24
@@ -0,0 +1,133 @@
1
+ module MS
2
+ module SpectrumLike
3
+ include Enumerable
4
+
5
+ attr_accessor :products
6
+ attr_accessor :precursors
7
+ attr_accessor :scans
8
+ attr_accessor :ms_level
9
+
10
+ # boolean for if the spectrum represents centroided data or not
11
+ attr_accessor :centroided
12
+
13
+ # The underlying data store. methods are implemented so that data[0] is
14
+ # the m/z's and data[1] is intensities
15
+ attr_accessor :data
16
+
17
+ def centroided?() centroided end
18
+
19
+ # data takes an array: [mzs, intensities]
20
+ # @return [MS::Spectrum]
21
+ # @param [Array] data two element array of mzs and intensities
22
+ def initialize(data, centroided=true)
23
+ @data = data
24
+ @centroided = centroided
25
+ end
26
+
27
+ # found by querying the size of the data store. This should almost always
28
+ # be 2 (m/z and intensities)
29
+ def size
30
+ @data.size
31
+ end
32
+
33
+ def ==(other)
34
+ mzs == other.mzs && intensities == other.intensities
35
+ end
36
+
37
+ # An array of the mz data.
38
+ def mzs
39
+ @data[0]
40
+ end
41
+
42
+ # An array of the intensities data, corresponding to mzs.
43
+ def intensities
44
+ @data[1]
45
+ end
46
+
47
+ def mzs_and_intensities
48
+ [@data[0], @data[1]]
49
+ end
50
+
51
+ # retrieve an m/z and intensity doublet at that index
52
+ def [](array_index)
53
+ [@data[0][array_index], @data[1][array_index]]
54
+ end
55
+
56
+ # yields(mz, inten) across the spectrum, or array of doublets if no block
57
+ def points(&block)
58
+ @data[0].zip(@data[1], &block)
59
+ end
60
+
61
+ alias_method :each, :points
62
+ alias_method :each_point, :points
63
+
64
+ # if the mzs and intensities are the same then the spectra are considered
65
+ # equal
66
+ def ==(other)
67
+ mzs == other.mzs && intensities == other.intensities
68
+ end
69
+
70
+ # returns a new spectrum whose intensities have been normalized by the tic
71
+ # of another given value
72
+ def normalize(norm_by=:tic)
73
+ norm_by = tic if norm_by == :tic
74
+ MS::Spectrum.new([self.mzs, self.intensities.map {|v| v / norm_by }])
75
+ end
76
+
77
+ def tic
78
+ self.intensities.reduce(:+)
79
+ end
80
+
81
+ # ensures that the m/z values are monotonically ascending (some
82
+ # instruments are bad about this)
83
+ # returns self
84
+ def sort!
85
+ _points = points.to_a
86
+ _points.sort!
87
+ _points.each_with_index {|(mz,int), i| @data[0][i] = mz ; @data[1][i] = int }
88
+ self
89
+ end
90
+
91
+ # returns the m/z that is closest to the value, favoring the lower m/z in
92
+ # the case of a tie. Uses a binary search.
93
+ def find_nearest(val)
94
+ mzs[find_nearest_index(val)]
95
+ end
96
+
97
+ # same as find_nearest but returns the index of the point
98
+ def find_nearest_index(val)
99
+ find_all_nearest_index(val).first
100
+ end
101
+
102
+ def find_all_nearest_index(val)
103
+ _mzs = mzs
104
+ index = _mzs.bsearch_lower_boundary {|v| v <=> val }
105
+ if index == _mzs.size
106
+ [_mzs.size-1]
107
+ else
108
+ # if the previous m/z diff is smaller, use it
109
+ if index == 0
110
+ [index]
111
+ else
112
+ case (val - _mzs[index-1]).abs <=> (_mzs[index] - val).abs
113
+ when -1
114
+ [index-1]
115
+ when 0
116
+ [index-1, index]
117
+ when 1
118
+ [index]
119
+ end
120
+ end
121
+ end
122
+ end
123
+
124
+ def find_all_nearest(val)
125
+ find_all_nearest_index(val).map {|i| mzs[i] }
126
+ end
127
+
128
+ # uses MS::Spectrum.merge
129
+ def merge(other_spectra, opts={})
130
+ MS::Spectrum.merge([self, *other_spectra], opts)
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,43 @@
1
+
2
+ module MS
3
+
4
+ class UserParam
5
+
6
+ # (optional) a CV::Param object
7
+ attr_accessor :unit
8
+
9
+ # (required)
10
+ attr_accessor :name
11
+
12
+ # (optional)
13
+ attr_accessor :value
14
+
15
+ # (optional) e.g. 'xsd:float'
16
+ attr_accessor :type
17
+
18
+ # takes a few different incantations:
19
+ #
20
+ # name, unit_acc# or CV::Param object
21
+ # name, value, unit_acc# or CV::Param object
22
+ # name, value, type, unit_acc# or CV::Param object
23
+ def initialize(*args)
24
+ @unit =
25
+ if args.size > 1 && ((args.last.is_a?(::CV::Param) || args.last =~ /^[A-Za-z]+:\d+$/))
26
+ unit_arg = args.pop
27
+ unit_arg.is_a?(::CV::Param) ? unit_arg : MS::CV::Param[unit_arg]
28
+ end
29
+ @name, @value, @type = args
30
+ end
31
+
32
+ end
33
+ end
34
+
35
+ # A UserParam
36
+ # (has no accession)
37
+ # (has no cvRef)
38
+ # name (required)
39
+ # type
40
+ # unitAccession
41
+ # unitCvRef
42
+ # unitName
43
+ # value
data/lib/mspire.rb ADDED
@@ -0,0 +1,6 @@
1
+
2
+ require 'ms/mass/aa' # requires ms/mass
3
+
4
+ module Mspire
5
+ VERSION = IO.read(File.join(File.dirname(__FILE__), '..', 'VERSION')).chomp
6
+ end